mongodb - 聚合和$锁定
问题描述
我在 MongoDB 中有两个集合,我想从中生成一个报告。采集数据如下 学生
[
{
_id:"1",
name:"stu 1",
class: "7th"
},
{
_id:"2",
name:"stu 2",
class: "7th"
},
{
_id:"3",
name:"stu 1",
class: "7th"
}
]
活动
[
{
_id:"1",
studentIds:["1","3"],
taskName:"Craft work 1"
},
{
_id:"2",
studentIds:["1"],
taskName:"Craft work 2"
}
]
我想使用聚合管道生成的报告如下,我对 $lockup 管道感到震惊。有人可以帮我弄这个吗?
学生报告
{
_id:1
name: "stu 1",
class: "7th",
tasks: ["Craft work 1", "Craft work 2"]
},
{
_id:1
name: "stu 2",
class: "7th",
tasks: []
},
{
_id:1
name: "stu 3",
class: "7th",
tasks: ["Craft work 1", "Craft work 2"]
}
解决方案
我假设studentIds
活动中的字段应该是一个数组。这似乎是一个错字。如果是这样,您可以使用以下方法聚合所需的输出:
https://mongoplayground.net/p/UBE0oNWLBsR
db.students.aggregate([
{
$lookup: {
"from": "activities",
"localField": "_id",
"foreignField": "studentIds",
"as": "tasks"
}
},
{
$addFields: {
tasks: "$tasks.taskName"
}
}
])
推荐阅读
- android - 如何在不暂停 Calling-Activity 的情况下启动 Intent?
- python - 获取 python 可执行文件的原始脚本名称
- ios - 如果一个应用程序只显示加密消息,它是否属于出口合规性
- php - Xampp 上的 Laravel 虚拟主机无法正常工作
- react-native - 尝试在模拟器中 luanch avd 时出现 android studio 错误
- ios - 如何将捆绑包添加到 react-native App
- linux - 如何检查特定 irq 在 linux 内核中是否被禁用?
- firebase - 如何在 Firebase + Firestore + Flutter 中使用 StreamBuilder 将所有子集合数据获取到 Widget
- c# - 在 DevExpress Grid 中显示 JSON 格式的数据
- c++ - 有谁知道我如何在随机选择 6 个项目中的 1 个(如剑/盾/等)然后将其添加/显示到背包的菜单上显示?