好的,这个人正在杀了我。也许它已经很晚了,我忘记了什么,但这应该有效。
出于测试目的,我的收藏中有大约6000份文件。有一个名为Priority
的属性,每个实例的值都为2.
以下两个查询均返回所有 6000个文档:
{
Priority: {
$gt: 1
}
}
和
{
Priority: {
$lt: 10
}
}
然而,此查询返回0结果,根据Explain,对所有6000个文档进行全面扫描:
{
$and: [
{
Priority: {
$gt: 1
}
},
{
Priority: {
$lt: 10
}
}
]
}
我错过了什么吗?
答案 0 :(得分:4)
如果我说,“我需要一个可以容纳四个人的汽车和一辆可以容纳至少八个人的汽车的人”,有一辆汽车可以容纳八个人的人通常不会被理解为符合资格。您的和查询只能通过两个值为Priority的条目来满足,一个小于10且一个大于1。
docs for and有一个指向mongoDB的multikey semantics的链接。
答案 1 :(得分:2)
您不应在此使用$and
。
相反,您可以像这样重写您的查询:
{Priority: {$gt: 1, $lt: 10}}