Heim >Datenbank >MySQL-Tutorial >mongodb查询内嵌文档

mongodb查询内嵌文档

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 14:58:451298Durchsuche

mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({id:1, members:[{name:BuleRiver1, age:27, gender:M}, {name:BuleRiver2, age:23, gender:F}, {name:BuleRiver3, age:21, gender:M}]}); 不能使用db.XXX.find({members:{name:Bu

mongodb查询内嵌文档

 

假设有这样一个文档:

db.XXX.remove();

db.XXX.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2", "age":23, "gender":"F"}, {"name":"BuleRiver3", "age":21, "gender":"M"}]});

不能使用db.XXX.find({"members":{"name":"BuleRiver1"}});进行查询,查询的结果是空集。只有完全匹配一个的时候才能获取到结果,因此:

db.XXX.find({"members":{"name":"BuleRiver1", "age":27, "gender":"M"}});

 

可以得到结果。

如果把键值进行颠倒,也得不到结果:

db.XXX.find({"members":{"age":27, "name":"BuleRiver1", "gender":"M"}});

 

得到的结果是空集

我们这样查询:

db.XXX.find({"members.name":"BuleRiver1"});

是可以查询出结果的。

如果需要两个属性:

db.XXX.find({"members.name":"BuleRiver1", "members.age":27});

也可以查询出结果。

我们再进行破坏性尝试:

db.XXX.find({"members.name":"BuleRiver1", "members.age":23});

也可以查询出结果。

 

不过我们应该注意到:BuleRiver1是数组中第一个元素的键值,而23是数组中第二个元素的键值,这样也可以查询出结果。

 

对于我们的一些应用来说,这显然不是我们想要的结果。所以我们应该使用$elemMatch:

db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":27}}});

可以查询出结果,而

db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":23}}});

查询不出结果。因此,这正是我们想要的。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:mongodb中的upsert和multiNächster Artikel:hadoop mapreduce多表关联