Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Javascript 在异步函数中将新对象推送到Mongoose中的嵌套数组_Javascript_Mongodb_Mongoose_Async Await - Fatal编程技术网

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

Javascript 在异步函数中将新对象推送到Mongoose中的嵌套数组,javascript,mongodb,mongoose,async-await,Javascript,Mongodb,Mongoose,Async Await,假设我有这样一个模式: const Schema1 = new Schema({ field1: String, field2: String, array1: [{ objfield1: String objfield2: Date, objfield3: { type: Schema.Types.ObjectId, ref: 'OtherModel', required: true, }, }], }, op

假设我有这样一个模式:

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中的u.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

比如:

mongoose
findOneAndUpdate()

mongo
$push

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

比如:

mongoose
findOneAndUpdate()

mongo
$push

您在try..catch中有错误吗?您在try..catch中有错误吗?谢谢!这是有效的,但需要注意的是,返回更新的记录需要{new:true}选项。谢谢!这是有效的,但需要注意的是,返回更新的记录需要{new:true}选项。
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',
    });
  }
};