【发布时间】:2019-04-29 02:55:23
【问题描述】:
我需要加入/查找三个集合。 “团体” “用户” “链接标签” “照片”
我正在从集合组中获取所有组。
group {
id: 1,
start: 10.12,
linkedUsers : [1,2,3,4,5]
}
然后我需要从用户那里查找/加入
user {
id: 1,
name: ""
}
然后从linkedTags
tag {
userId: 1,
rounds: 3,
time: 180
}
然后从“照片”
photo {
userId: 1,
location: ""
}
所以我需要这样:
Group {
id: 1,
start: 10.12,
linkedUsers: [1,2,3,4],
users: [
1:{
id: 1,
name: "",
rounds: 3,
time: 180,
photos: [
1: {
id: 1,
location: ""
}
]
}
]
}
这是我迄今为止尝试过的。我认为我需要分阶段进行,但我还没有弄清楚如何去做。
db('groups').aggregate([
{
$lookup: {
from: 'users',
localField: 'linkedUsers',
foreignField: 'id',
as: 'users'
}
},
{
$unwind: "$users"
},
{
$lookup: {
from: 'photos',
localField: 'linkedUsers',
foreignField: 'id',
as: 'photos'
}
},
{
$unwind: "$photos"
},
{
$lookup: {
from: 'linkedTags',
localField: 'linkedUsers',
foreignField: 'id',
as: 'tags'
}
},
{
$unwind: "$tags"
},
{ $group: {
_id: null,
id: "$id",
start: '$start',
linkedUsers: "$linkedUsers",
users: {$push: {
id: "$users.id",
name: "$users.name",
rounds: "$tags.rounds",
time: "$tags.time",
photos: {$push: {
id: "$photos.id",
location: "photos.location"
}}
}}
}}
])
编辑 1: 这是我遇到的第一个错误:
MongoError: 字段 'id' 必须是累加器对象
我已经阅读了该内容,但我不明白它们是如何组合在一起的。
编辑 2: 我通过将分组包装在 _id 中解决了这个问题:{}
现在我遇到无法识别的表达式'$push'
编辑 3: 在 Atlas、4.0.4 Enterprise 上运行。
【问题讨论】:
-
对我来说一切都很好。有什么问题?
-
我得到的第一个错误是:“MongoError: The field 'id' must be an accumulator object” 我已经更新了我的问题以包含这个。
-
我修复了将整个组包装在 _id 中的问题:{} 现在我得到“MongoError: Unrecognized expression '$push'”
-
仅使用
photos: $photos。 -
放上你使用的mongodb版本会更好
标签: arrays node.js mongodb mongodb-query aggregation-framework