【问题标题】:Mongoose findOneAndUpdate object inside a nested array嵌套数组中的猫鼬 findOneAndUpdate 对象
【发布时间】:2020-04-24 02:13:35
【问题描述】:

这是我的架构

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

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

【问题讨论】:

  • 屏幕和布局在架构中都没有_id?
  • 抱歉我的错误,我更新了架构

标签: node.js mongodb express mongoose


【解决方案1】:

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

你可以使用arrayFilters来实现你想要的。

此处的 options 对象定义了 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)
        }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2020-05-10
    • 2020-10-28
    • 1970-01-01
    • 2014-07-24
    • 2017-01-28
    相关资源
    最近更新 更多