0

我的 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"}
]

我想查询两个条件:

  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。

我怎么做?

4

1 回答 1

2

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

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

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

这将返回:

[ { 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 } ]

你在说:

“如果记录的 objID 为“morph” OR“mot”且 objVal 为 1,我想要该记录,OR如果记录的 objID 为“osmo” OR“ph”且 objVal 为 0。”

对象用于匹配,数组生成OR.

于 2019-04-05T23:35:52.737 回答