首页 > 解决方案 > 比较两个集合与一个字段 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 万行效率不高。

我还有什么选择?

标签: mongodbcollectionsmongo-shell

解决方案


我认为您有类似此 链接的问题。您可以使用 $lookup 聚合函数来连接两个表并获取一些您需要的值


推荐阅读