javascript - 在异步函数中将新对象推送到 Mongoose 中的嵌套数组
问题描述
假设我有一个如下所示的模式:
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
数组中。我尝试使用 _.merge from lodash,我尝试使用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
喜欢:
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',
});
}
};
猫鼬findOneAndUpdate()
:https :
//mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate mongo $push
:https ://docs.mongodb.com/manual/reference/operator/update/push/
推荐阅读
- python - 'NoneType' 没有属性(使用 pyodbc/sql 连接)
- c# - 有没有办法在 C# 中读取精确数量的拆分整数?
- java - Bridge 设计模式在 Java 中是否只有一个抽象类和接口类?
- python - 如何在图像中找到垂直线?(Opencv and Python) 总垂直雪崩需要罚款
- javascript - 在 JQuery 中查找 div 中的图像
- git - Github post push hook
- sql - 累积计算 - 基于样本数据
- data-structures - 你如何实现一个有序的哈希表?
- html - 如何将外部 React 库添加到静态 HTML 页面
- windows - GreaseMonkey 上的徽章图标