首页 > 解决方案 > 在异步函数中将新对象推送到 Mongoose 中的嵌套数组

问题描述

假设我有一个如下所示的模式:

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数组中。我尝试使用 _.merge from lodash,我尝试使用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',
    });
  }
};

标签: javascriptmongodbmongooseasync-await

解决方案


如果你想用新元素更新你的数组,使用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 $pushhttps ://docs.mongodb.com/manual/reference/operator/update/push/


推荐阅读