我希望项目数组中的 createdBy 字段 成为一个对象(从“用户集合”中查找)并填充 firstName 和 lastName 字段。
工作区 =(包含)=> 项目
问题:如果我在项目数组的 createdBy 作为 localfield 上对用户集合运行另一个查找。它在输出的末尾添加了另一个对象。这是不对的。我希望每个项目数组条目都有自己的创建者。
{
"workspaceName" : "My first workspace",
"projects" : [
{
"_id" : ObjectId("60857689d2744351901ada70"),
"resources" : [ ],
"status" : false,
"createdAt" : ISODate("2021-04-25T14:02:15.159Z"),
"projectName" : "First project",
"workspace" : ObjectId("60857673d2744351901ada6e"),
"createdBy" : {
firstName: "John", // < == to be looked up from users coll
lastName: "Doe", // < == to be looked up from users coll
}
"__v" : 0
}
]
}
{
"workspaceName" : "My first workspace",
"projects" : [
{
"_id" : ObjectId("60857689d2744351901ada70"),
"resources" : [ ],
"status" : false,
"createdAt" : ISODate("2021-04-25T14:02:15.159Z"),
"projectName" : "First project",
"workspace" : ObjectId("60857673d2744351901ada6e"),
"createdBy" : ObjectId("607dc72f0eb1512830b44e57"), // < == here
"__v" : 0
}
]
}
db.userworks.aggregate([
{
$match: {
user: ObjectId('607dc72f0eb1512830b44e57'),
workspace: ObjectId('60857673d2744351901ada6e'),
},
},
{ $project: { _id: 0 } },
{
$lookup: {
from: 'workspaces',
localField: 'workspace',
foreignField: '_id',
as: 'workspaces',
},
},
{ $unwind: '$workspaces' },
{
$project: {
workspaceName: '$workspaces.name',
projects: '$workspaces.projects'
},
},
{
$lookup: {
from: 'projects',
localField: 'projects',
foreignField: '_id',
as: 'projects',
},
}
]).pretty()
用户作品集
{
user: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'User',
required: true,
},
workspace: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'Workspace',
required: true,
}
}
<块引用>
工作区组
{
owner: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'User',
required: true,
},
name: {
type: String,
required: true,
},
projects: [
{
type: mongoose.SchemaTypes.ObjectId,
ref: 'Project',
default: [],
},
],
}
<块引用>
用户
{
firstName: { type: String, required: true },
lastName: { type: String, required: true },
}