我真的很困惑如何解决这个问题。我想用特定的StudyGroup模型填充User模型的studyGroups数组。我通过路由器获得了特定的用户和studyGroup(用户为cuid: req.params.cuid
,而studyGroup为guid: req.params.guid
)。
这是我的代码:
用户
const userSchema = new Schema({
cuid: { type: 'String', required: true },
firstName: { type: 'String', required: true },
lastName: { type: 'String', required: true },
studentId: { type: 'Number', required: true },
password: { type: 'String', required: true },
email: { type: 'String', required: true },
dateAdded: { type: 'Date', default: Date.now, required: true },
lastLogin: { type: 'Date', default: null, required: false },
studyGroups: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "studyGroup"
}
]
});
学习小组
const studyGroupSchema = new Schema({
guid: { type: 'String', required: true },
groupName: { type: 'String', required: true },
course: { type: 'String', required: true },
teacher: { type: 'String', required: true },
description: { type: 'String', required: true },
dateAdded: { type: 'Date', default: Date.now, required: true },
});
路线
router.route('/:cuid/studyGroups/:guid').post(UserController.addUserStudyGroups);
这是所有动作发生的地方。首先,找到用户,现在,我想将整个studyGroup模型对象添加到数组中。所以我的想法是使用
guid: req.params.guid
查询studyGroup,但不知道这是否正确。控制者
export function addUserStudyGroups(req, res) {
User.findOne({ cuid: req.params.cuid }).populate('studyGroups').exec((err, studyGroups) => {
if (err) {
return res.status(500).send(err);
}
study
return res.json({ studyGroups });
});
}
最佳答案
现在,您可以使用$lookup
在Mongo 3.2中进行操作$lookup
接受四个参数from
:在同一数据库中指定要执行连接的集合。 from集合无法分片。localField
:指定从文档输入到$ lookup阶段的字段。 $ lookup在from集合的文档中对localField和foreignField执行相等的匹配。foreignField
:指定from集合中文档中的字段。as
:指定要添加到输入文档中的新数组字段的名称。新数组字段包含from集合中的匹配文档。
db.User.aggregate(
{$unwind: "$bars"},
{$lookup: {
from:"studyGroups",
localField: "studyGroups",
foreignField: "_id",
as: "studyGroupList"
}}
)