我有一个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
}
}
其易于写入错误。
有没有一些更聪明的方法来做到这一点,而不显式地在组阶段包含所有属性?
先谢谢你了!
1条答案
按热度按时间ezykj2lf1#
根据您的示例数据,它可能是这样的: