使用MongoDB中第1个元素的值更新后续数组元素

时间:2018-10-25 13:17:15

标签: mongodb

我正在Mongo 3.2环境中工作。我遇到一种情况,当前在名为“ membership”的属性的第一个元素中有一个名为“ customerNumber”的属性的值,该属性是一个数组。此“成员资格”属性位于文档的根目录。所以我文档的这一相关部分看起来像这样:

membership: [
 {
   _id: 'abc123',
   anotherProp: <value>,
   customerNumber: 123
 },
   _id: 'def456',
   anotherProp: <value>
 },
]

这对于集合中的所有文档都是如此。现在,对于一个文档,使用在第一个元素中找到的相同属性和值来更新数组中的每个后续元素将相对简单。但是我想知道是否有Mongo方法可以对集合中的所有文档完成此操作?

换句话说,基于上述实例,我希望文档在更新完成后看起来像这样:

membership: [
 {
   _id: 'abc123',
   anotherProp: <value>,
   customerNumber: 123
 },
   _id: 'def456',
   anotherProp: <value>,
   customerNumber: 123
 },
]

更新:根据一个建议,我尝试了此操作:

db.customers.update(
   { membership: { $elemMatch: { customerNumber: { $exists: false } } } },
   { $set: { "membership.$.customerNumber" : "$membership.0.customerNumber" } },
)

...但是这不起作用,并产生相当钝的错误消息:

  

选择无效,无法执行。

1 个答案:

答案 0 :(得分:0)

基于mongodb $ (update)$exists

db.<collection_name>.update(
   { membership: { $elemMatch: { customerNumber: { $exists: false } } } },
   { $set: { "membership.$.customerNumber" : '123' } },
)