【发布时间】:2017-12-13 13:19:36
【问题描述】:
我正在尝试填充我的文档中引用另一个集合的两个对象数组。然而,它总是在结果中显示为一个空数组,这让我感到惊讶。我在这里做错了什么?有没有更好的方法来“填充”uploaded_files 和 file_history?
这是我的总结:
Project.aggregate(
{ $match: {"project_id": projectId}},
{ $addFields: {
uploaded_files: {
$filter: {
input: '$uploaded_files',
as: 'uploadedFile',
cond: {$eq: ['$$uploadedFile.upload_id', uploadId]}
}
},
file_history: {
$filter: {
input: '$file_history',
as: 'revision',
cond: {$eq: ['$$revision.upload_id', uploadId]}
}
},
}},
{ $lookup: {
from: 'users',
localField: 'owner',
foreignField: '_id',
as: 'owner'
}},
{ $lookup: {
from: 'files',
localField: 'uploaded_files.file',
foreignField: '_id',
as: 'test'
}},
{ $lookup: {
from: 'files',
localField: 'file_history.file',
foreignField: '_id',
as: 'test2'
}},
{ $unwind: '$owner' },
{ $limit: 1 }
).then(projects => {
if (projects.length == 0)
return res.status(404).send({ error: "Couldn't find a project with this id" })
let project = projects[0]
})
我的文档如下所示:
{
"_id" : ObjectId("5935a41f12f3fac949a5f925"),
"project_id" : 13,
"updated_at" : ISODate("2017-07-09T19:41:51.396Z"),
"created_at" : ISODate("2017-06-05T18:34:07.150Z"),
"owner" : ObjectId("591eea4439e1ce33b47e73c3"),
"name" : "Demo project",
"uploaded_files" : [
{
"display_name" : "001.jpg",
"file" : ObjectId("596286ff7d3a594ed4797848"),
"upload_id" : ObjectId("596286ff7d3a594ed4797849"),
"created_at" : ISODate("2017-07-09T19:41:51.000Z")
}
],
"file_history" : [
{
"display_name" : "001.jpg",
"file" : ObjectId("596286ff7d3a594ed4797848"),
"upload_id" : ObjectId("596286ff7d3a594ed4797849"),
"created_at" : ISODate("2017-07-09T19:41:51.000Z")
}
]
}
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework