findOneAndUpdate не создает ObjectId - PullRequest
       6

findOneAndUpdate не создает ObjectId

0 голосов
/ 27 августа 2018

Мне нужно сделать запрос на исправление, чтобы обновить только одно (или несколько) поле (я) одновременно. У меня есть большой объект, который является моим документом, и внутри вложенного массива объектов.

Например, для моей машины это схема:

const carSchema = new Schema({
  owner: [{value: {type: String}, label: {type: String}}],
  carPlate: {type: String},
  carColor: {type: String},
  carBrand: {type: String},
  carStatus: {type: String}
});

const myObject = new Schema({
...
cars: [carSchema]
...
});

Когда я отправляю свои изменения, я делаю это так:

let dynamicVar = 'cars.' + I + '.' + Myfield; this.props.updateGeneral ({_ id: this.props.general._id, [dynamicVar]: [myfield.value]});

Я на редуксе, поэтому мои действия выглядят так:

export function updateGeneral(data) {
    let _id = data._id;
    delete data._id;
    return {
        type: 'UPDATE_GENERAL',
        payload: client.patch(`${url}/${_id}`, data)
    }
}

И мой запрос PATCH выглядит так:

router.patch('/url/:id', async (req, res, next) => {
myObject.findOneAndUpdate({_id: req.params.id}, {$set: req.body }, {upsert: true, new: true}, function (err, objectReturn) {
    if (err) return next(err);
    cn = cn.substr(0, cn.indexOf(' {'));
    res.json(objectReturn);

  });
});

Моя БОЛЬШАЯ проблема заключается в том, что мое поле обновляется или вставляется, но если оно будет вставлено и создаст новый массив, оно не создаст связанный идентификатор объекта. Он даже не создаст массив объекта, просто объект со свойством.

Как я могу сделать, чтобы mongoose инициировал ObjectId ??

1 Ответ

0 голосов
/ 27 августа 2018

В ответ на этот пост похоже, что вы не можете обновить идентификаторы объектов. При этом вы фактически «удаляете» объект и создаете новый.

...