MongoDB - 我如何查询 SQL 的“INTERSECT”?

Posted

技术标签:

【中文标题】MongoDB - 我如何查询 SQL 的“INTERSECT”?【英文标题】:MongoDB - how can I query "INTERSECT" of SQL? 【发布时间】:2020-06-03 12:49:45 【问题描述】:

我对 MongoDB 查询中的“INTERSECT”查询有疑问。

我想在 MongoDB 中像下面的 SQL 查询一样查询。

(select course_id from section where semester = 'fall' and year = '2009') 
intersect 
(select course_id from section where semester = 'spring' and year = '2010');

在我的MongoDB中,Section集合数据结构如下。

 
"_id" : 
    "course_id" : "486", 
    "sec_id" : "1", 
    "semester" : "Fall", 
    "year" : 2009.0
, 
"course_id" : "486", 
"sec_id" : "1", 
"semester" : "Fall", 
"year" : 2009.0, 
"building" : "Whitman", 
"room_number" : "134", 
"time_slot_id" : "K"

如何查询得到与SQL语言相同的结果?

【问题讨论】:

【参考方案1】:

这不是很性感,但你可以这样做:

db.collection.aggregate([
    
        $match: 
            $or: [
                
                    $and: [
                        
                            year: 2009
                        ,
                        
                            semester: "fall"
                        
                    ]
                ,
                
                    $and: [
                        
                            year: 2010
                        ,
                        
                            semester: "spring"
                        
                    ]
                
            ]
        
    ,
    
        $group: 
            _id: "$course_id",
            years_x_semester: $addToSet: year: "$year", semester: "$semester",
        
    ,
    
        $match: 
            "years_x_semester.1": $exists: true
        
    
])

【讨论】:

本以为可以,但测试后,无法得到想要的结果。:'-( 你想要什么结果? 稍作修改就解决了!非常感谢!!!

以上是关于MongoDB - 我如何查询 SQL 的“INTERSECT”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此类 sql 查询转换为 mongodb 查询

如何在 MongoDB 中执行此 Sql 查询

如何将此 sql 查询转换为 mongodb?

MongoDB如何避免SQL注入混乱?

MongoDB IP地址BETWEEN查询

MongoDB 如何支持类 SQL 查询