由于使用子文档查询 MongoDB 集合存在很多混淆,我认为值得用示例来解释上述答案:
首先我在集合中只插入了两个对象,即:message as:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "reservations@marriott.com"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "reservations@marriott.com",
"To" : "kprasad.iitd@gmail.com"
}
}
>
那么查询的结果是什么:db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
应该是一个,因为这些查询对于headers等于对象{From: "reservations@marriott.com"}的文档,只有ie不包含其他字段,或者我们应该将整个子文档指定为一个领域。
所以根据@Edmondo1984 的回答
子文档中的相等匹配选择文档如果子文档完全匹配指定的子文档,包括字段顺序。
从上面的语句来看,下面的查询结果应该是什么?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
如果我们改变From 和To 的顺序,即与第二个文档的子文档相同呢?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
所以,它完全匹配指定的子文档,包括字段顺序。
对于使用点运算符,我想每个人都非常清楚。让我们看看下面的查询结果:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
我希望以上示例的这些解释能让人们更清楚地了解使用子文档查找查询。