我正在编写一个pymongo查询表达式,我想使用一个匹配所有内容的运算符(无论该字段是否存在)。
例如,我想找到x的值,它使以下两个查询等效:
collection.find({'a': 2, 'b': x})
collection.find({'a': 2})
我知道这样做的最好方法是简单地使用第二个查询。由于超出本文范围的原因,在我的情况下是不可能的,所以我想找出x的值。
我想过像
这样的事情x = {'$ne': <some large random number unlikely to occur>}
但它们看起来并不优雅。
答案 0 :(得分:1)
如果您必须保持查询规范的结构,那么就没有可以帮助您的操作员,您将不得不求助于您提到的黑客攻击。
如果您放宽约束以便必须有另一个字段,那么您有一些选择,但它不必使用b
作为其键。例如:
collection.find({
'a': 2,
'$or': [{'b': {'$exists': true}}, {'b': {'$exists': false}}]
})
......但我知道这不是你所要求的。
答案 1 :(得分:0)
以下是我将使用的查询:
db.collection.find({'a': 2, 'b': {$in: [null, false, /.*/]}})
如果'b'为空(不存在)或任何值(正则表达式匹配所有值),它将匹配。