Node.js 向mongo阵列添加多个元素时使用Mongoose中间件
基本上我有两个mongodb集合,用户和项目。 我想跟踪用户正在处理的项目, 以及正在处理给定问题的用户Node.js 向mongo阵列添加多个元素时使用Mongoose中间件,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,基本上我有两个mongodb集合,用户和项目。 我想跟踪用户正在处理的项目, 以及正在处理给定问题的用户 const User = mongoose.model('User', new Schema({ name: { type: String, }, _projects: [{ type: Schema.ObjectId, ref: 'Project' }] }) 及 现在,假设我想将多个现有用户id添加到现有项目中。 最佳做法是什么? 现在,我正在使
const User = mongoose.model('User', new Schema({
name: {
type: String,
},
_projects: [{
type: Schema.ObjectId,
ref: 'Project'
}]
})
及
现在,假设我想将多个现有用户id添加到现有项目中。
最佳做法是什么?
现在,我正在使用findOneAndUpdate获取项目文档,以将用户id推送到数组中。然后是mongoose中间件,我获取最后添加的条目并从中获取用户id:
Schema.post('findOneAndUpdate', addProjectToUser)
function addProjectToUser(updatedProject, next) {
User.findByIdAndUpdate(
updatedProject._usersWorkingOn[updatedProject._usersWorkingOn.length - 1],
{ $push: { '_projects': updatedProject._id}},
{ 'new': true }
).then(() => {
next()
})
}
当我将一个用户添加到项目中时,这一点就起作用了。但是,如果要在一次保存中添加多个用户,addProjectToUser无法知道向数组中添加了多少项
我是遗漏了什么,还是想的全错了?你有没有试过猫鼬前钩?现在我可以得到查询了,谢谢。但是我仍然不确定如何定位用户id。查询有一个字段:{u update:{'$push':{{u usersWorkingOn:'1a7de64844d565fcbasab89b'}}是否有任何方法提取id?您是否尝试过mongoose的预钩子?现在我可以得到查询了,谢谢。但是我仍然不确定如何定位用户id。查询有一个字段:{u update:{'$push':{{u usersWorkingOn:'1a7de64844d565fcbasab89b'}}是否有任何方法提取id?
Schema.post('findOneAndUpdate', addProjectToUser)
function addProjectToUser(updatedProject, next) {
User.findByIdAndUpdate(
updatedProject._usersWorkingOn[updatedProject._usersWorkingOn.length - 1],
{ $push: { '_projects': updatedProject._id}},
{ 'new': true }
).then(() => {
next()
})
}