Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 向mongo阵列添加多个元素时使用Mongoose中间件_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 向mongo阵列添加多个元素时使用Mongoose中间件

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添加到现有项目中。 最佳做法是什么? 现在,我正在使

基本上我有两个mongodb集合,用户和项目。 我想跟踪用户正在处理的项目, 以及正在处理给定问题的用户

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()
  })
}