我正在尝试使用express更新猫鼬模式中嵌套数组中的值。我有所需的代码,我想我需要更新它,但是数组没有更新。
因此,我们的想法是能够拥有一个带有两个字段 schemaName 和 schemaFields 的数据库架构对象的数组。我希望能够根据需要更新(添加/删除)特定 schema对象的 schemaFields 字段中的值。
我已经在互联网上的这里和其他地方尝试了很多东西,但似乎没有任何效果。我尝试使用findOneAndUpdate,findByIdAndUpdate等。
我的猫鼬模式如下,
let databaseSchema = new Schema({
schemaName: { type: String },
schemaFields: [String]
});
let databaseSchemas = new Schema(
{
dbSchemas: [databaseSchema]
},
{
collection: 'databaseSchemas'
}
);
我的更新功能如下,
schemasModel.mongo
.update(
{
_id: req.body.documentId,
'dbSchemas._id': req.body.schemaId
},
console.log('preparin to push the field \n'),
{
$push: {
'dbSchemas.$.schemaFields': req.body.newField
}
}
)
.then(() => {
res.send('new field added successfully');
});
答案 0 :(得分:1)
因此,我通过删除console.log()作为model.update()函数的第二个参数来解决了这个问题。显然,这必须是操作的对象。
Model.update函数的工作代码如下,
schemasModel.mongo
.update(
{
_id: req.body.documentId,
'dbSchemas.schemaName': req.body.schemaToSearch
},
{
$push: {
'dbSchemas.$.schemaFields': req.body.newField
}
}
)
.then(() => {
res.send('new field added successfully');
});