繁体   English   中英

在异步函数中将新对象推送到 Mongoose 中的嵌套数组

[英]Pushing a new object to a nested array in Mongoose in async functions

假设我有一个如下所示的架构:

const Schema1 = new Schema({
  field1: String,
  field2: String,
  array1: [{
    objfield1: String
    objfield2: Date,
    objfield3: {
      type: Schema.Types.ObjectId,
      ref: 'OtherModel',
      required: true,
    },
  }],
}, options);

这里array1是一个对象数组。 我希望能够使用 PUT 请求访问端点并将新对象推送到array1数组中。 我尝试使用 lodash 中的 _.merge,我尝试使用push将新对象添加到数组中,但无济于事。

exports.addObject = async (req, res, next) => {
  try {

    let schemaInstance = await db.Schema1.findById(req.params.id);
    schemaInstance['array1'].push(req.body)
    schemaInstance.markModified('array1');
    let updatedSchemaInstance = await schemaInstance.save();

    return res.status('200').json(updatedSchemaInstance);

  } catch (err) {
    console.log(err);
    return next({
      status: 400,
      message: 'No users in the database',
    });
  }
};

如果要使用新元素更新数组,请使用findOneAndUpdate()函数和$push

喜欢:

exports.addObject = async (req, res, next) => {
  try {

    let schemaInstance = await db.Schema1.findOneAndUpdate(
      {_id: req.params.id}, 
      {$push: {'array1': req.body});
    schemaInstance.markModified('array1');
    let updatedSchemaInstance = await schemaInstance.save();

    return res.status('200').json(updatedSchemaInstance);

  } catch (err) {
    console.log(err);
    return next({
      status: 400,
      message: 'No users in the database',
    });
  }
};

猫鼬findOneAndUpdate() : https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate mongo $push :https://docs.mongodb.com/manual/reference/operator/update/push/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM