繁体   English   中英

更新猫鼬中非常嵌套的文档

[英]Update very nested document in Mongoose

给定以下架构,如何更新array1.array2.status

var SomeSchema = new mongoose.Schema({
    status: Boolean, 
    array1: [{
        array2[{
            status: boolean
        }]
    }]
})

首先,将您的Schema重组为SubSchema就像这样:

var valueItemSchema = new mongoose.Schema({
    _id: Number,
    status: Boolean
});

var subItemSchema = new mongoose.Schema({
    _id: Number,
    array2: [valueItemSchema]
});

/*
//or this if you dont want _id in your nested documents

var valueItemSchema = new mongoose.Schema({
    status: Boolean
}, {
    _id: false
});

var subItemSchema = new mongoose.Schema({
    array2: [valueItemSchema]
}, {
    _id: false
});
*/

var itemSchema = new mongoose.Schema({
    status: Boolean,
    array1: [subItemSchema]
});

var valueItem = db.model('ValueItem', valueItemSchema);
var SubItem = db.model('SubItem', subItemSchema);
var Item = db.model('Item', itemSchema);

//create a new item
var myItem = new Item({
    status: true,
    array1: new SubItem({
        _id: 0,
        array2: [new valueItem({
            _id: 0,
            "status": true
        }), new valueItem({
            _id: 1,
            "status": false
        }), new valueItem({
            _id: 2,
            "status": true
        })]
    })
});

然后,您可以通过_id更新array2的元素:

Item.findOne({
    status: true
}).exec(
    function(err, result) {
        result.array1.id(0).array2.id(0).status=false;
        result.save(function(err) {
            console.log(result)
        });
    }
);

或者,如果您不希望子文档中的任何_id按索引更新:

Item.findOne({
    status: true
}).exec(
    function(err, result) {

        result.array1[0].array2[0].status=false;
        result.save(function(err) {
            console.log(result)
        });
    }
);

是一个完整的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM