【问题标题】:Equivalent query from mysql to mongodb从 mysql 到 mongodb 的等效查询
【发布时间】:2022-01-18 08:41:27
【问题描述】:
JOIN t2 ON t1.id=t2.id AND t1.date=t2.date

我是 mongodb 的新手,我没有找到一个查询来加入两个集合,我需要比较两个集合中的两个字段。

【问题讨论】:

  • 请注意,当您将应用程序从 MySQL 等关系 RDBMS 迁移到 MongoDB 等 NoSQL 数据库时,通常 MongoDB 中的集合数量远少于 MySQL 中的表数量。否则,你做了一些根本错误的事情。 NoSQL 数据库没有针对连接进行优化,其中一些根本不支持连接!

标签: mysql sql database mongodb nosql


【解决方案1】:

您可以使用$lookup with custom pipeline 定义自定义“加入”条件:

db.col1.aggregate([
    {
        $lookup: {
            from: "col2",
            let: { col1_id: "$id", col1_date: "$date" },
            pipeline: [
                { 
                    $match: { 
                        $expr: {
                            $and: [ 
                                { $eq: [ "$id", "$$col1_id" ] }, 
                                { $eq: [ "$date", "$$col1_date" ] } 
                            ] 
                        }
                    } 
                }
            ],
            as: "joinOutput"
        }
    }
])

Mongo Playground

请注意,let 部分是您从 col1pipeline 中定义变量的地方,iddate 是对来自 col2 的对应字段的引用

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 2022-01-11
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多