我有一个字段,其中包含一个包含三个值的数组,这些值设置为null或true:
"evidence": [true, null, true]
我想创建一个匹配这些值的几个不同组合的查询,例如:
"evidence": [true,true,null]
"evidence": [true,true,true]
我目前通过执行两个不同的查询来执行此操作。我可以将数组与正则表达式匹配:
"evidence": [true,true,/true|null/]
我尝试这样做的结果为零。
答案 0 :(得分:1)
在查询对象中,您可以通过数字索引引用evidence
数组中的特定元素。如果您将此功能与$in
运算符结合使用以匹配一组值中的一个,则可以执行以下查询:
在shell中:
db.test.find({
'evidence.0': true,
'evidence.1': true,
'evidence.2': {$in: [true, null]}
})
在Python中:
db.test.find({
'evidence.0': True,
'evidence.1': True,
'evidence.2': {'$in': [True, None]}
})
答案 1 :(得分:0)
如上所述,一种简单的方法是使用set操作。对于该数组中的单个字段,您可以执行以下操作:
container['evidence'][index] in set([True, False])
如果你试图匹配数组中的所有字段,你可以做一些事情,比如列出那些可接受的值集,然后执行以下操作:
query = (set([True]), set([True, False]), set([None]))
all(x in query[i] for i, x in enumerate(container['evidence'][index]))
这个构造将连续检查每个构造,如果一个失败,它将以False拯救。如果没有关于你要做什么的更多信息,很难改进这些一般性评论。