![](/img/trans.png)
[英]Update or push object into nested array in found document mongoose
[英]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.