Mongoose:更新特定文档数组的元素
Posted
技术标签:
【中文标题】Mongoose:更新特定文档数组的元素【英文标题】:Mongoose: update an element of an array of a specific document 【发布时间】:2018-12-14 17:55:17 【问题描述】:我有一个名为“公司”的文档集合。
公司 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
请提出一个可能的解决方案。
【问题讨论】:
【参考方案1】: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()
);
【讨论】:
太棒了……!它工作......非常感谢。您能否建议在哪里了解除官方文档之外的 mongoose 查询。 我用过很多mongodb,经验丰富,文档非常好。 MongoDB 文档提供了有助于学习的示例。 感谢您的信息【参考方案2】:db.company.update(
_id: "1",
data:
$elemMatch:
value: 'emp11'
,
$set:
'data.$.value': 'emp99'
)
【讨论】:
请添加 cmets 以解释问题所在以及您的代码 sn-p 如何显示正确的解决方案。 基本上您所做的是将要更新的数据传递到第一个查询对象中。data: $elemMatch: value: 'emp11'
基本上是在说“在数据数组(或任何你的数据)中,将元素与值“emp11”匹配。然后在查询的$set
部分,我们正在执行$set:
"data.$ .value": "emp99"`` 这基本上是说将数据项设置为新值“emp99”。它如何找到特定数据项是通过使用找到正确元素的猫鼬$
运算符索引,在引擎盖下。以上是关于Mongoose:更新特定文档数组的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何从 mongoose 的 mongo 文档中返回一个数组?