mongodb - 比较两个集合与一个字段 Mongodb
问题描述
我有两个集合,其中包含 1500 万个加 id 的结果,我想比较这两个集合,以便我可以返回一个不在 colb 中的可乐结果集
cola 有 1450 万个文档,而 colb 有 15.5 个文档:
可乐的例子
{
"_id" : "123"
},
{
"_id" : "45"
}
colb 示例
{
"_id" : "123"
},
{
"_id" : "456"
},
{
"_id" : "4"
}
我希望他的结果是
{
"_id" : "456"
},
.
.
.
{
"_id" : "4"
}
使用 $lookup 挂起并在 16mb 过大时使用不同的错误。我也使用了聚合和 $nin,但是因为聚合始终是一个对象,所以 $nin 会出错,因为它需要一个数组。
挂起,永远不会完成。
db.cola.aggregate([
{
$lookup: {
from: "colb",
localField: "ID",
foreignField: "ID",
as: "ID_match"
}
},
{
$match: {
$expr: {
$eq: [ { "$size": "$ID_match" }, 0 ]
}
}
}
])
检测到循环依赖
var a = db.cola.aggregate({$group: {_id: "$ClaimID"}});
db.cola.find({ID: {$nin: a}})
我还写了一个 JS 循环,但循环 1500 万行效率不高。
我还有什么选择?
解决方案
我认为您有类似此 链接的问题。您可以使用 $lookup 聚合函数来连接两个表并获取一些您需要的值
推荐阅读
- java - 如何在 Java 中使用 lambda 打印字符串数组列表
- javascript - AngularJS(v1.7.9)-当兄弟(B)更新同一个控制器上的范围时,如何获取兄弟(A)指令的范围进行更新
- html - 如何编辑 element.style?
- sequelize.js - 排序子子关联 - Sequelize
- javascript - 如何将 FastAPI 身份验证与简单的前端(无框架)结合起来?
- terraform - terraform - 将 vpc_id 参数从不同的 VPC 传递到多个子网
- firebase - StreamProvider 和 Firebase
- macos - 将多个文件中的姓氏grep到多个子目录
- tensorflow - 如何重塑一维 CNN 的数据集?
- c++ - 如何用-1全局初始化二维数组?