这是我的模式
var tlSchema = new mongoose.Schema({
_id:String,
name:String,
cost:Number,
rows:Number,
spr:Number,
screen:[{
_id:String,
date:String,
time:String,
layout:[{
_id:String,
seatno:String,
booked:Boolean
}]
}]
})
var tl = mongoose.model("tl",tlSchema);
我想在屏幕数组中更新布局数组内的预订字段,我的查询是这样的。
tl.findOneAndUpdate({ "screen._id":"5e9385432bdc30062e22694c","screen.layout._id":"5e9385432bdc30062e226974"},
{"$set":{"screen.0.layout.$.booked":false}}
,function(err,v){
if(err){console.log(err)}else{
console.log(v)
}
})
我没有收到任何错误,而且我的数据也没有得到更新,请帮忙
你要做的是更新一个数组中的特定元素,这个元素包含在另一个数组的特定元素中。
你可以使用 arrayFilters
来实现你想要的东西。
选项对象在这里定义了2个过滤器,每个数组一个,以及 $set
更新中使用这些过滤器只影响每个数组中的匹配元素。
tl.findOneAndUpdate({ "screen._id":"5e9385432bdc30062e22694c","screen.layout._id":"5e9385432bdc30062e226974"},
{"$set":{"screen.$[screenFilter].layout.$[layoutFilter].booked":false}},
{"arrayFilters":[
{"screenFilter._id":"5e9385432bdc30062e22694c"},
{"layoutFilter._id":"5e9385432bdc30062e226974"}
]},
function(err,v){
if(err){console.log(err)}else{
console.log(v)
}
})