在MongoDB中使用$和or match之间的区别

时间:2016-10-05 13:21:00

标签: mongodb

使用$和匹配字段的多个值并使用$ match和$ in之间有什么区别或优势吗?

db.collectionOne.aggregate([
{$match:{name:{'$in':['Jack','Jill']},
        city:{'$in':['LA','NY']}
        }
      }])

db.collectionOne.aggregate([
{$match:{
  $and:[{name:{'$in':['Jack','Jill']},
        city:{'$in':['LA','NY']}
        }
  ]}
}])

或者应该$和仅用于数值以获得更好的性能?

1 个答案:

答案 0 :(得分:0)

首先,我认为你的例子中有一个拼写错误。它应该是

db.collectionOne.aggregate([
{$match:{
  $and:[{name:{'$in':['Jack','Jill']}},
        {city:{'$in':['LA','NY']}
        }
  ]}
}])

您使用的两个代码段与本页提及的内容相同 https://docs.mongodb.com/manual/reference/operator/query/and/

  

请注意

     

MongoDB在指定逗号时提供隐式AND操作   分隔的表达式列表。使用显式AND与$和   当相同的字段或操作符必须时,操作符是必需的   在多个表达式中指定。

所以当你需要在同一个键上应用两个条件时,使用$,如下所示。

db.collectionOne.aggregate([
{$match:{
  $and:[{name:{'$in':['Jack','Jill','Bill','Kill']}},
        {name:{'$nin':['Matt','Bill']}
        }
  ]}
}])

以上示例并不好,但它解释了方案