猫鼬:更新特定文档数组的元素

时间:2018-07-06 07:22:30

标签: node.js mongodb mongoose mongodb-query

我有一个名为“ company”的文件。

公司1-

{ 
  _id: '1',
  data:[
    {_id:'11', value: 'emp11'},
    {_id:'12', value: 'emp12'}
  ]
}

公司2-

 { 
  _id: '2',
  data:[
    {_id:'21', value: 'emp21'},
    {_id:'22', value: 'emp22'}
  ]
}

现在,我想将值“ emp11”更新为“ emp99”。 我正在遵循这种方法-

companyModel.findById('1', function(err, company) {
    return company.data.update(
        {_id: '11'},
        {$set: {value: 'emp99'}}
    );
});

我能够找到公司,但是之后出现了错误-

company.data.update is not a function

请提出可能的解决方案。

2 个答案:

答案 0 :(得分:7)

companyModel.update(
  { "_id" : :"1", "data._id": "11" }, 
  { "$set": { "data.$.value": "emp99" }}, 
  function(err, company) {
    console.log(company)
})

不需要使用findById ,您可以直接使用它。 在mongo update中,您需要搜索文档和要更新的字段。 您要更新的字段至关重要,因为它在您使用$时用于定位数组的位置。

但是您也可以按照以下步骤进行操作:

companyModel.findById('1', function(err, company) {
    for(var i =0; i< company.data.length; i++)
        if(company.data._id === "11")
            break;
    if(i<company.data.length)
        company.data[i].value = 'emp99'
    company.save()
});

答案 1 :(得分:0)

db.company.update({
    _id: "1",
    data: {
        $elemMatch: {
            value: 'emp11'
        }
    }
}, {
    $set: {
        'data.$.value': 'emp99'
    }
})