猫鼬嵌套子文档更新和删除
Posted
技术标签:
【中文标题】猫鼬嵌套子文档更新和删除【英文标题】:moongose nested subdocument update and delete 【发布时间】:2016-11-09 07:56:33 【问题描述】:"_id":
"$oid": "577cc50d10b5a6c42b26f414"
,
"firstName": "new",
"lastName": "new",
"__v": 0,
"A": [
"AfirstName": "AfirstName",
"AlastName": "AlastName",
"_id":
"$oid": "577dbef2f2c9f5901f402efe"
,
"AB": [
"AB1firstName": "AB1firstName",
"AB1lastName": "AB1lastName",
"_id":
"$oid": "577dd3b1495663ec2a6ca456"
,
"AB2firstName": "AB2firstName",
"AB2lastName": "AB2lastName",
"_id":
"$oid": "577dd3bc495663ec2a6ca45a"
]
]
Example.update( _id: , A._id: , A.AB._id: ,
"$set": "A.$.AB": data,
function(err,model) console.log(model); if (err) throw err; )
这只会更新 AB 的第一个数据,我想通过 _id 更新 AB 子文档的数据,并且还想删除带有 _id 的特定嵌套子文档
【问题讨论】:
【参考方案1】: Example.findById(_id,function(err,doc)
var result = doc.A.id(AId).AB.id(AB.ABId);
result.AB1firstName="first Name";
result.AB1lastName= "Last Name";
doc.save();
);
这将更新
【讨论】:
【参考方案2】:每个文档都有一个_id。 DocumentArrays 有一个特殊的 id 方法,用于通过 _id 查找文档。
Example.findOne( _id: id, A._id: Aid, A.AB._id: ABid,
function(err,model)
if (err) throw err;
var ABDoc model.A.id(Aid).AB.id(ABid);
ABDoc.AB2firstName="new value";
ABDoc.AB2lastName="new value";
model.save();
)
【讨论】:
以上是关于猫鼬嵌套子文档更新和删除的主要内容,如果未能解决你的问题,请参考以下文章