在一个嵌套数组中的Mongoose findOneAndUpdate对象。

问题描述 投票:0回答:1

这是我的模式

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)
        }
})

我没有收到任何错误,而且我的数据也没有得到更新,请帮忙

node.js mongodb express mongoose
1个回答
0
投票

你要做的是更新一个数组中的特定元素,这个元素包含在另一个数组的特定元素中。

你可以使用 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)
        }
})
© www.soinside.com 2019 - 2024. All rights reserved.