我有一个 MongoDB 集合,其中文档有一个对象数组。像这样:
{
_id: ...,
a: [
{
aa: "foo1"
bb: "bar1"
},
{
aa: "foo2"
bb: "bar2"
},
{
aa: "foo3"
bb: "bar3"
}
...
],
b: ...
}
我想修改对象的一些字段,其余部分保持不变。我正在为此使用聚合框架,分三个阶段:展开数组,修改对象(现在在文档的根级别),最后按
_id
重新分组以取回数组。
{
$unwind: "a"
},
{
$set: {"a.aa": {$concat: ["prefix-", "$a.aa", "-suffix"]}}
},
{
$group: {
_id: "$_id",
a: {$push: "$a"},
b: {$first: "$b"}
}
}
到目前为止一切顺利。
问题是我除了数组之外没有只有一个字段。我有很多(~10)所以小组赛实际上是这样的:
{
$group: {
_id: "$_id",
a: {$push: "$a"},
b: {$first: "$b"},
c: {$first: "$c"},
d: {$first: "$d"},
// a lot of fields here
}
}
写起来容易出错
是否有一些更聪明的方法可以做到这一点,而无需在小组赛阶段明确包含所有属性?
提前致谢!