mongodb - Mongo合并结果
问题描述
大家好,我有 3 个具有 dbref 的集合,我想在其中安装类似于下图所示的结果,但我无法使用任何聚合获得满足感,你能指出更好的方法吗?
冷却:
- data1 - 主要 data_reference1
- 在 data1 data_reference2 中引用
- 在 data_reference2 中引用
/* EXAMPLE RECORD data1 */
{
"_id" : ObjectId("604fafd443487df824aeca61"),
"name" : "doc1",
"reference_data1_list" : [
{
"data_reference" : ObjectId("604fb00643487df824aeca91"),
"user_add" : "USER01"
},
{
"data_reference" : ObjectId("604fb00d43487df824aeca9b"),
"user_add" : "USER01"
},
{
"data_reference" : ObjectId("604fb01743487df824aecaa7"),
"user_add" : "USER02"
}
]
}
/* EXAMPLE RECORDS data_reference1 */
/* 1 */
{
"_id" : ObjectId("604fb00643487df824aeca91"),
"reference_desc" : "Test Referenced Field 01",
"reference_data2" : ObjectId("604fb24743487df824aecd14")
}
/* 2 */
{
"_id" : ObjectId("604fb00d43487df824aeca9b"),
"reference_desc" : "Test Referenced Field 02",
"reference_data2" : ObjectId("604fb24743487df824aecd14")
}
/* 3 */
{
"_id" : ObjectId("604fb01743487df824aecaa7"),
"reference_desc" : "Test Referenced Field 03",
"reference_data2" : ObjectId("604fb25743487df824aecd27")
}
/* EXAMPLE RECORDS data_reference2 */
/* 1 */
{
"_id" : ObjectId("604fb24743487df824aecd14"),
"name" : "Student"
}
/* 2 */
{
"_id" : ObjectId("604fb25743487df824aecd27"),
"name" : "Theacher"
}
期望的结果:
{
"_id": ObjectId("604fafd443487df824aeca61"),
"name": "doc1",
"reference_data1_list": [
{
"_id": ObjectId("604fb00643487df824aeca91"),
"reference_desc": "Test Referenced Field 01",
"reference_data2": {
"_id": ObjectId("604fb24743487df824aecd14"),
"name": "Student"
}
},
{
"_id": ObjectId("604fb00d43487df824aeca9b"),
"reference_desc": "Test Referenced Field 02",
"reference_data2": {
"_id": ObjectId("604fb24743487df824aecd14"),
"name": "Student"
}
},
{
"_id": "604fb01743487df824aecaa7",
"reference_desc": "Test Referenced Field 03",
"reference_data2": {
"_id": ObjectId("604fb25743487df824aecd27"),
"name": "Theacher"
}
}
]
}
我对 mongo 没有太多的技能,也没有找到可以在示例中使用的任何类似示例。
解决方案
试试这个查询:
db.data1.aggregate([
{ $unwind: "$reference_data1_list" },
{
$lookup: {
from: "data_reference1",
let: {
data_ref: "$reference_data1_list.data_reference",
user_add: "$reference_data1_list.user_add"
},
pipeline: [
{
$match: {
$expr: { $eq: ["$_id", "$$data_ref"] }
}
},
{
$addFields: { user_add: "$$user_add" }
}
],
as: "reference_data1_list"
}
},
{ $unwind: "$reference_data1_list" },
{
$lookup: {
from: "data_reference2",
localField: "reference_data1_list.reference_data2",
foreignField: "_id",
as: "reference_data1_list.reference_data2"
}
},
{ $unwind: "$reference_data1_list.reference_data2" },
{
$group: {
_id: "$_id",
name: { $first: "$name" },
reference_data1_list: { $push: "$reference_data1_list" }
}
}
]);
输出
{
"_id" : ObjectId("604fafd443487df824aeca61"),
"name" : "doc1",
"reference_data1_list" : [
{
"_id" : ObjectId("604fb00643487df824aeca91"),
"reference_desc" : "Test Referenced Field 01",
"reference_data2" : {
"_id" : ObjectId("604fb24743487df824aecd14"),
"name" : "Student"
},
"user_add" : "USER01"
},
{
"_id" : ObjectId("604fb00d43487df824aeca9b"),
"reference_desc" : "Test Referenced Field 02",
"reference_data2" : {
"_id" : ObjectId("604fb24743487df824aecd14"),
"name" : "Student"
},
"user_add" : "USER01"
},
{
"_id" : ObjectId("604fb01743487df824aecaa7"),
"reference_desc" : "Test Referenced Field 03",
"reference_data2" : {
"_id" : ObjectId("604fb25743487df824aecd27"),
"name" : "Theacher"
},
"user_add" : "USER02"
}
]
}
推荐阅读
- pdfbox - 使用 Apache PDFBox 获取 PDF 中图像的绝对位置
- python - numpy数组的维度和长度有什么区别?
- python - 使用 pandas 列表使用 postgresql 查询过滤数据
- python - 使用重采样保留非数字列
- c# - while Returning Mvc View Nullable 对象必须有一个值
- snowflake-cloud-data-platform - 关于使用 Cron 为每个月的第二个工作日创建任务
- sql - TimescaleDB 无法创建没有列的唯一索引
- reactjs - React - 按 useState 中的最新日期排序
- android - android studio 3.5 上的 app:mergeDebugResources 错误
- vba - 如果零件文件有链接的设计表,则 VBA SOLIDWORKS Pack and Go 重命名不起作用(从 Excel 控制)