MongoDB中的$ elemMatch查询 [英] $elemMatch query in MongoDB
问题描述
我有一个集合'name',其中包含2个结构如下的文件:
I have a collection 'name' with 2 documents of the structure :
doc 1:
{
a: 1
b : [{name:"AAA",age:10},
{name:"BBB",age:12},
{name:"CCC",age:13}]
}
doc 2:
{
a: 2
b : [{name:"DDD",age:14},
{name:"EEE",age:15},
{name:"FFF",age:16}]
}
由于我是MongoDB的新手,所以我试图找到使用$ elemMatch运算符而不使用它的区别.基本上,我试图查询并找到名称为AAA且年龄为10的第一个文档(doc 1).因此,使用$ elemMatch,我的查询如下所示:
Since I am new to MongoDB, I am trying to find the difference of using the $elemMatch operator and not using it. Basically I am trying to query and find the first doc ( doc 1) with name AAA and age 10. So using the $elemMatch, my query looks like this :
db.name.find({b: {$elemMatch :{name:"AAA",age:10}}})
此查询工作正常,但是我的问题是,当我可以像这样查询时,需要使用此查询什么:
This query works perfectly fine, but my question is that what's the need to use this query when I can query like this :
db.name.find({b:{name:"AAA",age:10}})
我确信$ elemMatch应该有一些原因,只是想找出区别.在此先感谢您的答复!!!
I am sure there should be some reason for $elemMatch, just trying to find the difference. Thanks in advance for the reply !!!
推荐答案
关键区别在于第二个查询(不包含$elemMatch
)将仅匹配b
数组中仅包含这两个字段的元素,并且只能按此顺序.
The key difference is that the second query (without the $elemMatch
) would only match elements in the b
array that only contained those two fields, and only in that order.
因此,第一个查询将与以下两个文档匹配,但第二个查询将不匹配:
So the first query would match the following two documents, but the second query wouldn't:
{
a: 1
b: [{name: "AAA", age: 10, city: 'New York'},
{name: "BBB", age: 12, city: 'Paris'},
{name: "CCC", age: 13, city: 'London'}]
}
{
a: 1,
b: [{age: 10, name: "AAA"},
{name: "BBB", age: 12},
{name: "CCC", age: 13}]
}
这篇关于MongoDB中的$ elemMatch查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!