node.js - 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
请提出一个可能的解决方案。
解决方案
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()
});