【发布时间】:2021-12-11 10:22:25
【问题描述】:
我有两个集合,包含 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 万行效率不高。
我还有什么选择?
【问题讨论】:
标签: mongodb collections mongo-shell