使用正则表达式匹配数组的所有字段

时间:2014-05-02 22:55:24

标签: python mongodb

我有一个字段,其中包含一个包含三个值的数组,这些值设置为null或true:

"evidence": [true, null, true]

我想创建一个匹配这些值的几个不同组合的查询,例如:

"evidence": [true,true,null]
"evidence": [true,true,true]

我目前通过执行两个不同的查询来执行此操作。我可以将数组与正则表达式匹配:

"evidence": [true,true,/true|null/]

我尝试这样做的结果为零。

2 个答案:

答案 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拯救。如果没有关于你要做什么的更多信息,很难改进这些一般性评论。