我在 MobgoDB 中有多个文档 如何对“abc”和“xyz”上的组进行操作并获取一个文档。请参阅“输出文件”。 需要与 (Document 1 U Document 2) 和 (Document 1 U Document 3) 进行联合。 U=联合
文档 1
{
"data": {
"Inside_data": {
"project": {
"abc": {
"alpha": 4,
"beta" : 45
},
"xyz": {
"alpha": 214,
"beta" : 431
}
}
}
}
}
文档 2
"Deal": {
"name": "abc",
"url" : "www.abc.com,
"email": [ "abc@gmail.com"],
"total": 2
}
文档 3
"Deal": {
"name": "xyz",
"url" : "www.googl.com,
"email": [ "xyz@gmail.com"],
"total": 25
}
预期产出。
{
{
"name": "abc",
"url" : "www.abc.com,
"email": "abc@gmail.com",
"total": 2,
"alpha": 4,
"beta" : 45
},
{
"name": "xyz",
"url" : "www.googl.com,
"email": "xyz@gmail.com",
"total": 25,
"alpha": 214,
"beta" : 431
}
}
答案 0 :(得分:0)
db.collection.aggregate([
{
$match: {
Deal: {
$exists: true
}
}
},
{
$lookup: {
from: "collection",
let: {
name: "$Deal.name"
},
pipeline: [
{
$match: {
data: {
$exists: true
}
}
},
{
$project: {
data: {
$reduce: {
input: {
$objectToArray: "$data.Inside_data.project"
},
initialValue: {},
in: {
$cond: [
{
$eq: [
"$$this.k",
"$$name"
]
},
"$$this.v",
"$$value"
]
}
}
}
}
},
{
$project: {
_id: 0,
alpha: "$data.alpha",
beta: "$data.beta"
}
}
],
as: "Deal.data"
}
},
{
$unwind: "$Deal.data"
}
])
@turivishal 的回答