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
比如:
mongoosefindOneAndUpdate()
:
mongo
$push
:如果要使用新元素更新数组,请使用findOneAndUpdate()
函数和$push
比如:
mongoosefindOneAndUpdate()
:
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',
});
}
};