对多级子文档使用位置运算符[重复]
Posted
技术标签:
【中文标题】对多级子文档使用位置运算符[重复]【英文标题】:Using positional operator for multiple levels of subdocuments [duplicate] 【发布时间】:2017-01-12 01:54:45 【问题描述】:我在 mongodb 中使用子文档。
使用一级子文档,我可以更新文档
Parent.findOneAndUpdate( _id: parentId, 'children._id': childId ,
$set:
'children.$.name': name
, (err, doc) =>
...
);
但我对另一级别的子文档执行相同操作时遇到问题,即
Parent.findOneAndUpdate( _id: parentId, 'children._id': childId, 'children.grandchildren._id': grandchildId ,
$set:
'children.$.grandchildren.$.name': name
, (err, doc) =>
...
);
位置运算符 ($
) 是否仅限于 1 级子文档?
【问题讨论】:
【参考方案1】:位置运算符 ($) 只支持一个级别,也支持第一个匹配元素。作为一种解决方法,您可以这样做,
$set:
'children.$.grandchildren.0.name': name
我觉得这个问题解释的比较清楚here
【讨论】:
哦。谢谢。但是,您的解决方法不是只采用孙子数组中的第一个对象,而不是与我的grandchildId
匹配的对象吗?
是的,它会选择您提到的第一个对象。但是您可以使用 mongodb 的 foreach 函数并更新与grandchildId
匹配的每个孙子的名称。我提供的答案中的链接也有一个您可以参考的答案。 Here is the link for that answer
该功能已于2017年实现jira.mongodb.org/browse/SERVER-831以上是关于对多级子文档使用位置运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Mongoose和MongoDB 2.6插入子文档中数组中的特定位置
如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符