mongodb - 如何使用查找或聚合查询对象是否在mongodb中有嵌套的对象数组
问题描述
下面的对象有关键职责。我想从员工集合中获取员工详细信息。到目前为止,我尝试了许多查询与管道查找的组合。如何使用查找或聚合编写查询
集合有下面提到的对象数据
{
"_id" : ObjectId("61332cbcf509434a28b1e42e"),
"name" : "Company 1",
"dutys" : [
{
"_id" : ObjectId("61332cbcf509434a28b1e437"),
"duty_name" : "Front",
"emp_ids" : [
ObjectId("613329c9c2cd9949d3a7c630"),
ObjectId("613329c9c2cd9949d3a7c631"),
ObjectId("613329c9c2cd9949d3a7c632")
]
},
{
"_id" : ObjectId("61332cbcf509434a28b1e438"),
"duty_name" : "Cleaning",
"emp_ids" : [
ObjectId("613329c9c2cd9949d3a7c633"),
ObjectId("613329c9c2cd9949d3a7c634")
],
}
]
}
我想要带有员工详细信息的预期输出例如预期输出
{
"_id" : ObjectId("61332cbcf509434a28b1e42e"),
"name" : "Company 1",
"dutys" : [
{
"_id" : ObjectId("61332cbcf509434a28b1e437"),
"duty_name" : "Front",
"emp_ids" : [
{
_id: ObjectId("613329c9c2cd9949d3a7c630"),
name: "Emp 1",
},
{
_id: ObjectId("613329c9c2cd9949d3a7c631"),
name: "Emp 2",
},
{
_id: ObjectId("613329c9c2cd9949d3a7c632"),
name: "Emp 3",
}
]
},
{
"_id" : ObjectId("61332cbcf509434a28b1e438"),
"duty_name" : "Cleaning",
"emp_ids" : [
{
_id: ObjectId("613329c9c2cd9949d3a7c633"),
name: "Emp 4",
},
{
_id: ObjectId("613329c9c2cd9949d3a7c634"),
name: "Emp 5",
}
],
}
]
}
解决方案
unwind
破坏数组
lookup
放置原始数据而不是 _id
project
添加字段
group
创建最终数据
db.collection('company').aggregate({
[
{
'$unwind': {
'path': '$dutys'
}
}, {
'$lookup': {
'from': 'emp', // emp collection name
'localField': 'dutys.emp_ids',
'foreignField': '_id',
'as': 'st'
}
}, {
'$project': {
'name': 1,
'dutys.duty_name': 1,
'dutys._id': 1,
'dutys.emp_ids': {
'$map': {
'input': '$st',
'as': 'z',
'in': {
'_id': '$$z._id',
'name': '$$z.name'
}
}
}
}
}, {
'$group': {
'_id': '$name',
'dutys': {
'$push': '$dutys'
}
}
}
]})
推荐阅读
- css - font-awesome 在 mvc5 中不起作用
- django - Django 中的日期和时间解析错误 ["'Tue, 02 Jul 2019 08:11:45 +0530' 值的格式无效。在 YYYY-MM-DD HH:MM[:ss[.uuu]][TZ]格式。”]
- python - 当我制作猎鹰 API 时,我的 excel 已损坏
- vba - 有没有办法让 VBA 代码检查 WINRAR 的两个不同位置
- neo4j - 如何正确编写暴发户脚本?
- java - 摇摆闪烁
- python - 无法为 heroku local 指定运行时
- asp.net - 我如何收听 Dockerized .NET Web 应用程序
- c - 指向字符串的指针数组(指针的基本类型)
- html - 学生科目的 Xampp 数据库