想象一下我有这个集合:
{
id: 1,
b: {
"field1": ['foo'],
"field2": ['bar']
}
}
{
id: 2,
b: {
"field2": ["foobar"],
"field3": ["foofoo"]
}
}
我想用MongoDB获得一个新的集合:
{
id: 1,
b_grouped: ['foo', 'bar']
}
{
id: 2,
b_grouped: ["foobar", "foofoo"]
}
我不知道文档中所有字段的名称,任何人都会知道如何执行这样的操作:
db.collection.aggregate(
[
{ "$project": { "b_grouped": { $concatArrays: ["$b.*"] } } }
]
)
你可以试试,
- $reduce输入
b
作为数组,在使用$objectToArray从对象转换到数组之后,这将转换"中的对象;k〃;(键(,";v〃;对象的(值(格式数组 - $concatArray用于连接
$raduce
的initialValue
($$value(和b
对象字段的数组$$this.v
db.collection.aggregate([
{
$project: {
b_grouped: {
$reduce: {
input: { $objectToArray: "$b" },
initialValue: [],
in: {
$concatArrays: ["$$this.v", "$$value"]
}
}
}
}
}
])
游乐场