我在mongodb中有一个查询,我必须在75到80之间过滤印度中的所有城市,我有这个工作表达式
{"$match":{"country":"India","lon":{"$gt":75},"lon":{"$lt":80}}},
这个表达式工作正常,但是在浏览$的文档时,我注意到了
当必须在多个表达式中指定相同的字段或运算符时,必须使用带有$和运算符的显式AND。
所以根据文档,它应该不能正常工作,因为我有lon字段出现多次但它按预期工作。那么任何人都可以向我解释什么情景文档指的是$和将需要哪些?
答案 0 :(得分:2)
您的查询“工作正常”的结论是不对的。查询实际上只会使用其中一个lon
字段;可能是第二个。因此查询将执行正常,但文档将无法正确过滤。
python提示证明:
>>> q = {"$match":{"country":"India","lon":{"$gt":75},"lon":{"$lt":80}}}
>>> q
{'$match': {'country': 'India', 'lon': {'$lt': 80}}}
要遵循的规则是,当您有多个条件用于同一个键时,您应该只使用$and
,并且不能将它们组合成单个对象。
正如chidham所说,您的查询应该构建为将两个lon
条件合并为:
{"$match": {"country": "India", "lon": {"$gt": 75, "$lt": 80}}}