MongoDB获取满足条件的所有嵌入式文档 [英] MongoDB get all embedded documents where condition is met

查看:39
本文介绍了MongoDB获取满足条件的所有嵌入式文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的 mongodb 中做了这个:

db.teams.insert({name:"Alpha team",employees:[{name:"john"},{name:"david"}]});db.teams.insert({name:"True team",employees:[{name:"oliver"},{name:"sam"}]});db.teams.insert({name:"Blue team",employees:[{name:"jane"},{name:"raji"}]});db.teams.find({"employees.name":/.*o.*/});

但我得到的是:

{ "_id" : ObjectId("5ddf3ca83c182cc5354a15dd"), "name" : "Alpha team", "employees" : [ { "name" : "john" }, { "name" : "david"}]}{_id":ObjectId(5ddf3ca93c182cc5354a15de"),名称":真正的团队",员工":[{名称":奥利弗"},{名称":山姆"}]}

但我真正想要的是

[{"name":"john"},{"name":"oliver"}]

如果不使用某种编程迭代器/循环,我很难找到这样的例子.或者我找到的示例返回父文档,这意味着我必须解析嵌入的数组员工并执行某种 UNION 语句?

例如

如何在 mongodb 中获取嵌入的文档?仅检索对象中的查询元素MongoDB 集合中的数组

有人能指出我正确的方向吗?

解决方案

请添加投影以过滤掉不需要的字段.请参考项目链接mongodbprojections

您的查找查询应使用如下投影参数构建:

db.teams.find({"employees.name":/.*o.*/}, {_id:0, "employees.name": 1});

这会给你回报:

[{"name":"john"},{"name":"oliver"}]

I did this in my mongodb:

db.teams.insert({name:"Alpha team",employees:[{name:"john"},{name:"david"}]});
db.teams.insert({name:"True team",employees:[{name:"oliver"},{name:"sam"}]});
db.teams.insert({name:"Blue team",employees:[{name:"jane"},{name:"raji"}]});
db.teams.find({"employees.name":/.*o.*/});

But what I got was:

{ "_id" : ObjectId("5ddf3ca83c182cc5354a15dd"), "name" : "Alpha team", "employees" : [ { "name" : "john" }, { "name" : "david" } ] }
{ "_id" : ObjectId("5ddf3ca93c182cc5354a15de"), "name" : "True team", "employees" : [ { "name" : "oliver" }, { "name" : "sam" } ] }

But what I really want is

[{"name":"john"},{"name":"oliver"}]

I'm having a hard time finding examples of this without using some kind of programmatic iterator/loop. Or examples I find return the parent document, which means I'd have to parse out the embedded array employees and do some kind of UNION statement?

Eg.

How to get embedded document in mongodb? Retrieve only the queried element in an object array in MongoDB collection

Can someone point me in the right direction?

解决方案

Please add projections to filter out the fields you don't need. Please refer the project link mongodb projections

Your find query should be constructed with the projection parameters like below:

db.teams.find({"employees.name":/.*o.*/}, {_id:0, "employees.name": 1});

This will return you:

[{"name":"john"},{"name":"oliver"}]

这篇关于MongoDB获取满足条件的所有嵌入式文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆