taffydb 在单个查询中使用 OR 和 AND

taffydb using OR and AND in single query

我的 TAFFYDB() 有这样的行(例如):

[
{"rowID":0,"objID":"hema","objVal":1,"objType":"n"},
{"rowID":0,"objID":"osmo","objVal":1,"objType":"n"},
{"rowID":0,"objID":"mot","objVal":1,"objType":"n"},
{"rowID":0,"objID":"morph","objVal":1,"objType":"n"},
{"rowID":0,"objID":"ph","objVal":0,"objType":"n"},
{"rowID":0,"objID":"conc","objVal":0,"objType":"n"}
]

我想查询2个条件:

  1. morph 或 mot 的值必须为 1
  2. ph和osmo的值必须为0

用于匹配 rowID 的

我正在这样尝试:

var ret=anaDataDB(
            [ 
                [ [{"objID":"morph","objID":"mot"}] ,{ "objVal":1} ] ,
                [ [{"objID":"osmo"} ] ,{ "objVal":0 } ],
                [ [{"objID":"ph"} ] ,{ "objVal":0 } ]
            ]       
            ).get();

但我得到的值太多了。例如,ph=1 的值。 我认为我拥有它的方式是使用 OR 并且我想要在 3 个比较之间进行 AND。

我该怎么做?

TaffyDB 的查询系统在您习惯之前有点笨拙。

它的简单技巧是:数组中的元素被视为 OR 条件的一部分。尝试对对象进行匹配。如果参数中的对象符合您要查找的记录,则返回。

var ans = anaDataDB(
    [
        {objID:["morph", "mot"], objVal:1},
        {objID:["osmo", "ph"], objVal:0}
    ]
    ).get();

这个returns:

[ { rowID: 0,
    objID: 'mot',
    objVal: 1,
    objType: 'n',
    ___id: 'T000002R000004',
    ___s: true },
  { rowID: 0,
    objID: 'morph',
    objVal: 1,
    objType: 'n',
    ___id: 'T000002R000005',
    ___s: true },
  { rowID: 0,
    objID: 'ph',
    objVal: 0,
    objType: 'n',
    ___id: 'T000002R000006',
    ___s: true } ]

你是说:

"I want the record if it has an objID of "morph" OR "mot" 其中 objVal 为 1,OR 如果记录的 objID 为 "osmo" OR "ph" 其中 objVal 为 0。"

对象用于匹配,数组构成OR