Выдвижение нового объекта во вложенный массив в Mon goose в asyn c функциях - PullRequest
0 голосов
/ 02 марта 2020

Допустим, у меня есть схема, которая выглядит следующим образом:

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 и pu sh новый объект в массиве array1. Я пытался использовать _.merge из loda sh, я пытался использовать 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',
    });
  }
};

1 Ответ

1 голос
/ 03 марта 2020

, если вы хотите обновить ваш массив новым элементом, используйте функцию 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',
    });
  }
};

mon goose findOneAndUpdate(): https://mongoosejs.com/docs/api.html#model_Model .findOneAndUpdate пн go $push: https://docs.mongodb.com/manual/reference/operator/update/push/

...