我目前正在开发一个可以控制项目的应用程序,这些项目有会议,而这些会议有参与者。
我想通过他的nomina
字段咨询参与者。
项目文档对象的结构:
{
"id":"5c1b0616a0441f27f022bfdc",
"name":"Project Test",
"area":"Area",
"date":"2019-01-01",
"meetings":[
{
"id":"5c1b073d445707834699ce97",
"objetive":"Objetive",
"fecha":"2019-01-01",
"participants":[
{
"nomina":1,
"name":"Person 1",
"role":"Rol1",
"area":"area1",
"signature":null
},
{
"nomina":2,
"name":"Person 2",
"role":"rol 2",
"area":"área 2",
"signature":null
}
]
}
]
}
预期的行为
我想通过nomina
来与会人员咨询,他们知道项目的id
,也知道会议的id
。
预期产量
具有:
id
项目= 5c1b0616a0441f27f022bfdc id
会议= 5c1b073d445707834699ce97 nomina
参与者= 1 预计查询将返回我:
{
"nomina":1,
"name":"Person 1",
"role":"Rol1",
"area":"area1",
"signature":null
}
答案 0 :(得分:1)
对于每个文档中不那么大量的会议,如果要获取确切的文档,则可以执行此管道,很简单:
db.collection.aggregate(
[
{
$match: {
id:"5c1b0616a0441f27f022bfdc"
}
}, {
$unwind: {
path : "$meetings"
}
},
{
$unwind: {
path : "$meetings.participants"
}
},
{
$match: {
"meetings.id":"5c1b073d445707834699ce97",
"meetings.participants.nomina":1
}
},
{
$replaceRoot: {
newRoot: "$meetings.participants"
}
}
]);
如果会议中有成千上万的元素,那么我建议您为会议添加另一个匹配项或将会议和项目ID分组。 但是,如果您只想获取包含所需内容的文档,那只是一个简单的查找查询:
db.collection.find({id:"5c1b0616a0441f27f022bfdc","meetings.id":"5c1b073d445707834699ce97","meetings.participants.nomina":1 });