我在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" : "True team", "employees" : [ { "name" : "oliver" }, { "name" : "sam" } ] }
但是我真正想要的是
[{"name":"john"},{"name":"oliver"}]
我很难在不使用某种程序化迭代器/循环的情况下找到示例。还是我发现的示例返回了父文档,这意味着我必须解析出嵌入式数组员工并执行某种UNION语句?
例如。
How to get embedded document in mongodb? Retrieve only the queried element in an object array in MongoDB collection
有人可以指出我正确的方向吗?
答案 0 :(得分:2)
请添加投影以过滤掉不需要的字段。请参考项目链接mongodb projections
您的查找查询应使用以下投影参数构造:
#Data = DataFrame, columns: fitted.values - ndvi/y-axis values, ts : time/x-axis values
#Caluclate index for maxima and peaks
x = np.array(Data['fitted.values'])
extrema_index = argrelextrema(data = x,comparator = np.greater )
peak_index = find_peaks(Data['fitted.values'])[0]
这将使您返回:
db.teams.find({"employees.name":/.*o.*/}, {_id:0, "employees.name": 1});
答案 1 :(得分:1)
可以通过简单的聚合管道解决。
db.teams.aggregate([
{$unwind : "$employees"},
{$match : {"employees.name":/.*o.*/}},
])
编辑:
OP想要跳过父字段。修改后的查询:
db.teams.aggregate([
{$unwind : "$employees"},
{$match : {"employees.name":/.*o.*/}},
{$project : {"name":"$employees.name",_id:0}}
])
输出:
{ "name" : "john" }
{ "name" : "oliver" }