首页 > 解决方案 > Mongoose:更新特定文档数组的元素

问题描述

我有一组名为“公司”的文件。

公司 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

请提出一个可能的解决方案。

标签: node.jsmongodbmongoosemongodb-query

解决方案


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()
});

推荐阅读