Мне нужно сделать запрос на исправление, чтобы обновить только одно (или несколько) поле (я) одновременно.
У меня есть большой объект, который является моим документом, и внутри вложенного массива объектов.
Например, для моей машины это схема:
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 ??