mongodb - 如何将查找文档中的字符串字段收集到 MongoDb 中根文档的数组字段中
问题描述
样本数据集
有第一组文件SET A:
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123456",
"baseId" : "123-123-123-123",
"name" : "test for 1",
"category" : "default"
}
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123456",
"baseId" : "124-124-124-124",
"name" : "test for 2",
"category" : "default"}
还有第二组文档SET B与SET A文档的docId键具有多对一关系
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123456",
"collect" : "abcd",
"name" : "test for date format"}
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123456",
"collect" : "bcde",
"name" : "test for date format"}
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123457",
"collect" : "abcd",
"name" : "test for date format"}
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123457",
"collect" : "bcdef",
"name" : "test for date format",}
需要将结果文档作为SET A文档,其中包含来自SET B文档的额外字段聚合,其中所有 SET B 文档的收集键应添加到结果文档的数组字段中
例如:生成的文档应该将与docId匹配的每个SET B文档中的收集键值推送(不同)到collectArray
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123456",
"baseId" : "123-123-123-123",
"name" : "test for 1",
"category" : "default"
"collectArray" : ["abcd", "bcde"]
}
{"_id" : ObjectId("56b872f475a4b3000326080e"),
"docId" : "123457",
"baseId" : "124-124-124-124",
"name" : "test for 2",
"category" : "default"
"collectArray" : ["abcd", "bcdef"]
}
尝试使用查找的方法:
{
$lookup: {
from: "set2collection",
localField: "docId",
foreignField: "docId",
as: "lookups"
}
}
- $addToSet(错误:仅适用于 $group)
- $addToField(找不到收集不同值的运算符)
- $mergeToObject(错误:用作累加器时的一元运算符)
探索原因
现有逻辑是通过首先按docId对所有SET B文档进行分组,然后应用 $addToSet 来完成的,由于SET B中的文档数量非常多,这变得非常慢。需要对其进行优化,这就是为什么考虑尝试查找的原因。
请帮助并建议当前方法或是否应采取任何其他途径。
解决方案
推荐阅读
- ios - 如何将此日期格式转换为我们在objective-c中的常规日期
- python - 当用户在网站上注册时如何为用户创建单独的表
- python - 学习 Wagtail 时 Python 模块名称冲突
- android - 我需要增加库模块的版本代码吗?
- python - 创建一个给定长度加起来为 1 的数字数组
- c - Swiss Ephemeris program swetest - Windows 和 Ubuntu 中的不同输出
- android - com.google.android.gms.common.api.ApiException: 12500,在 google 的 android firebase 项目中登录
- xml - 如何在 DataPower 中使用 XSLT 转换基于一个 XML 文件的多个 XML 并将所有请求调用到 MQ
- swiftui - Watch 上 SwiftUI 按钮中奇怪的内部视图
- reactjs - 表单上的 React-onSubmit 函数不起作用