我在MongoDb中有一个集合,其中包含文档“flights”,其中包含一个对象的字段数组。我想一次更新一个对象的一个属性。为此,我必须使用两个过滤器:一个用于选择要更新的文档,另一个用于选择数组中的对象。
我将arrayFilters
与Mongoose一起使用,如下所示:
这是我的飞行模式
第一个
假设我想将sitNumber对象中的属性IsSuspended从false更新为true:2.
//Controllers dashboard.js
blockSit : async (req, res) => {
try {
const flight = req.body.flightName
const sit = req.body.sitToBlock //sit es 2
const updateSit = await Flight.updateOne(
{ "flightName": flight},
{ "$set" : {"sits.$[si].isSuspended": true} },
{ "arrayFilters": [{ "si.sitNumber": sit} ]}
)
console.log(updateSit)
} catch (error) {
console.log(error)
}
}
就我所见,我的sintaxis是正确的。但是我一直收到下面的错误信息:
Error: Could not find path "sits.0.sitNumber" in schema
我不一定要使用arrayfilters。我愿意尝试任何其他允许我用mongoose更新对象嵌套数组中的属性的解决方案。
2条答案
按热度按时间ztmd8pv51#
sits
字段似乎是子文档数组,但没有描述这些字段的架构。请尝试定义架构。hwamh0ep2#
我是这样解决的:
首先,我需要在Mongoose中使用方法findOneandUpdate。另外,我在arrayFilters中添加了属性new并将其设置为true。