从 mysql 到 mongodb 的等效查询

Posted

技术标签:

【中文标题】从 mysql 到 mongodb 的等效查询【英文标题】:Equivalent query from mysql to 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 数据库没有针对连接进行优化,其中一些根本不支持连接! 【参考方案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 的对应字段的引用

【讨论】:

以上是关于从 mysql 到 mongodb 的等效查询的主要内容,如果未能解决你的问题,请参考以下文章

mongodb中sails“包含”的等效查询是啥?

如何从 MSSQL 连接查询中的字段中获取表名? (mysql_field_table 等效)

春季是不是有 mongoDB 的 @MappedSuperclass 等效注释?

聊聊MongoDB中连接池索引事务

PDI 步骤 MongoDB 输入 - $match 使用从上一步中的 MySQL 查询中获得的值

Mongoose / Mongodb 迁移到 MySQL