我想更新使用$ elemMatch获取的子文档.我在网上发现了一些帖子但到目前为止我无法让它上班.这就是我所拥有的:
架构:
var user = {
_id: ObjectId
addresses: [{
_id: ObjectId
street: String
}]
};
Run Code Online (Sandbox Code Playgroud)
码:
this.findOne({
'addresses._id': address_id
}, { 'occurrences': { $elemMatch: {
'_id': address_id
}}})
.exec(function(err, doc) {
if (doc) {
// Update the sub doc
doc.addresses[0].street = 'Blah';
doc.update({ 'addresses': { $elemMatch: { '_id': address_id }}}, { $set: {"addresses.$.street": doc.addresses[0].street }})
.exec(function(err, count) {
...
Run Code Online (Sandbox Code Playgroud)
以上结果将导致地址子文档被删除,并重新创建一个空白的新文档.如何保存doc/subdoc?
我的目标是能够通过子文档(地址)ID获取文档(用户),修改一个匹配的地址然后保存它.
Joh*_*yHK 11
您可以update通过模型上的单个调用完成所有操作,而不是首先使用findOne以下方式获取它:
User.update(
{'addresses._id': address_id},
{$set: {'addresses.$.street': 'Blah'}},
function(err, count) { ... });
Run Code Online (Sandbox Code Playgroud)
这将使用位置$操作的$set目标仅仅addresses是在查询匹配的元素.
| 归档时间: |
|
| 查看次数: |
6604 次 |
| 最近记录: |