我想更新数组中的子文档

时间:2017-11-06 15:09:44

标签: node.js mongodb

我现在使用mongooses将子文档拉到数组,现在我想用子文档的_id更改该子文档的详细信息字段的内容。

{
    subDocument: [{
        _id: ObjectId('123'),
        detail: 'I want update this part'          
    }]
}

我尝试使用如下所示的$ set方法,但它没有按预期工作。

Model.findByIdAndUpdate(uid, { $Set: {subDocument: {_id: _id}}});

查看下面显示的for语句可能会对性能产生不良影响。所以我想避免这种方法。

const data = findById(uid);

for(...) {
    if(data.subDocument[i]._id==_id) {
        data.subDocument[i].detail = detail
    }
}

你能告诉我一些我可以实现的mongodb查询吗?

而且,使用' for(;;)'是不是更好?上面显示的语句比使用mongodb的查询搜索?

2 个答案:

答案 0 :(得分:1)

这应该有效:

Model.findOneAndUpdate({"subdocument._id": uid},
        {
           $set: {
                "subdocument.$.detail ": "detail here"
            }
         },
        ).exec(function(err, doc) {
               //code 
        });

答案 1 :(得分:1)

要按ID查找子文档,我使用的是这样的内容:

[env:lolin32]
;platform = espressif32
platform = https://github.com/platformio/platform-espressif32.git#feature/stage
board = lolin32
framework = arduino
lib_extra_dirs = ..\libraries
lib_deps = 
  https://urltotherepo.git

希望它有所帮助。