mongodb中何时使用“$and”运算符?

mongodb中何时使用“$and”运算符?,mongodb,pymongo,Mongodb,Pymongo,我在mongodb中有一个查询,我必须过滤印度所有经度在75到80之间的城市,我有这个工作表达式 {"$match":{"country":"India","lon":{"$gt":75},"lon":{"$lt":80}}}, 这个表达式工作得很好,但是在浏览$and的文档时,我注意到 当必须在多个表达式中指定同一字段或运算符时,必须使用带$AND运算符的显式AND 所以根据文档,它不应该工作得很好,因为我有lon场多次出现,但它按预期工作。那么,有谁能向我解释一下什么样的场景文档指的是哪里

我在mongodb中有一个查询,我必须过滤印度所有经度在75到80之间的城市,我有这个工作表达式

{"$match":{"country":"India","lon":{"$gt":75},"lon":{"$lt":80}}},
这个表达式工作得很好,但是在浏览$and的文档时,我注意到

当必须在多个表达式中指定同一字段或运算符时,必须使用带$AND运算符的显式AND


所以根据文档,它不应该工作得很好,因为我有lon场多次出现,但它按预期工作。那么,有谁能向我解释一下什么样的场景文档指的是哪里需要$and

您认为查询工作正常的结论是不正确的。查询实际上只使用其中一个lon字段;可能是第二个。因此,查询将正常执行,但文档将无法正确过滤

python提示符下的证明:

>>>q={$match:{国家:印度,伦敦:{$gt:75},伦敦:{$lt:80}} >>>q {'match':{'country':'India','lon':{'lt':80}} 要遵循的规则是,当您对同一个键使用多个条件时,您应该只使用$and,并且不能将它们组合到一个对象中

正如chidham所指出的,您的查询应该被构造为结合两个lon条件,如下所示:

{$match:{国家:印度,伦敦:{$gt:75,$lt:80}}
你认为你的查询工作正常的结论是不对的。查询实际上只使用其中一个lon字段;可能是第二个。因此,查询将正常执行,但文档将无法正确过滤

python提示符下的证明:

>>>q={$match:{国家:印度,伦敦:{$gt:75},伦敦:{$lt:80}} >>>q {'match':{'country':'India','lon':{'lt':80}} 要遵循的规则是,当您对同一个键使用多个条件时,您应该只使用$and,并且不能将它们组合到一个对象中

正如chidham所指出的,您的查询应该被构造为结合两个lon条件,如下所示:

{$match:{国家:印度,伦敦:{$gt:75,$lt:80}}
顺便说一下,{$match:{country:India,lon:{$gt:75},lon:{$lt:80}}}和{$match:{country:India,lon:{$gt:75,$lt:80}}}@chridam是的,我也试过了。但是我想检查mongodb的隐式$and,根据文档,我的db在这个问题上不应该工作。顺便说一下,{$match:{country:India,lon:{$gt:75},lon:{$lt:80}}}与{$match:{country:India,lon:{$gt:75,{$lt:80}}}一样,我也试过了。但是我想检查mongodb的隐式$and,根据文档,我的db在这个问题上不应该工作。我的意思是我运行了这个查询,结果被接受为正确的结果。由于是在线测验,我不知道返回的正确输出是什么。因此,在您看来,我的查询不会给出75到80之间的值,因为第二个键覆盖了第一个键?正确,只使用$lt部分。观看MongoDB的视频以获得更清楚的解释,这是M001课程的一部分。我的意思是,我运行了该查询,并将其作为正确结果接受。由于是在线测验,我不知道返回的正确输出是什么。因此,在您看来,我的查询不会给出75到80之间的值,因为第二个键覆盖了第一个键?正确,只使用$lt部分。观看MongoDB的这段视频以获得更清晰的解释,这是M001课程的一部分