mongodb - 如何将数组文档值收集到 MongoDB 中的父文档中
问题描述
如何执行与LATERAL VIEW EXPLODE类似的聚合,然后在 spark 中选择所需的列,但使用 mongodb?
例如转换类似于以下内容的文档:
{
name: "john",
surname: "doe",
arr: [
{
itemName: "address",
itemVal: "2333. Street"
},{
itemName: "phone",
itemVal: "43098685446"
}
]
}
成平面文件:
{
name: "john",
surname: "doe",
address: "2333. Street",
phone: "43098685446"
}
解决方案
试试这个:
MongoDB >= v4.2
db.collection.aggregate([
{
$replaceWith: {
$mergeObjects: [
"$$ROOT",
{
$arrayToObject: {
$map: {
input: "$arr",
in: {
k: "$$this.itemName",
v: "$$this.itemVal"
}
}
}
}
]
}
},
{
$unset: [
"_id",
"arr"
]
}
])
MongoDB >= v3.6
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
"$$ROOT",
{
$arrayToObject: {
$map: {
input: "$arr",
in: {
k: "$$this.itemName",
v: "$$this.itemVal"
}
}
}
}
]
}
}
},
{
$project: {
_id: 0,
arr: 0
}
}
])
MongoDB >= v3.4.4
db.collection.aggregate([
{
$replaceWith: {
$arrayToObject: {
$concatArrays: [
{
$objectToArray: "$$ROOT"
},
{
$map: {
input: "$arr",
in: {
k: "$$this.itemName",
v: "$$this.itemVal"
}
}
}
]
}
}
},
{
$project: {
_id: 0,
arr: 0
}
}
])