【问题标题】:Query with join on mutiple collections with python in MongoDB在 MongoDB 中使用 python 对多个集合进行连接查询
【发布时间】:2020-03-18 17:21:15
【问题描述】:

我是 MongoDB 和 Python 的新手(使用 pymongo 3.10.1)。我可以查询一个集合,但我需要对两个集合执行连接

collection1 {
    code
    some other fields
}

collection2 {
    code
    some other fields
}

我想实现: select * from collection2 left inner join collection1 on collection2.code = collection1.code

我只找到了使用 Python 查询 MongoDB 的基本示例。 如何用 Python 实现这一点?我可以在 Pythonn 中使用 .aggregate 和 $lookup 吗?

【问题讨论】:

    标签: python-3.x mongodb pymongo-3.x


    【解决方案1】:

    终于搞定了,完整代码如下:

    from pymongo import MongoClient
    
    # connect to MongoDB, change the << MONGODB URL >> to reflect your own connection string
    client = MongoClient(<< MONGODB URL >>)
    db=client.mydb
    
    docs = db.collection1.aggregate([{"$lookup":{
                "from": "collection2",       # other table name
                "localField": "code",        # key field in collection 2
                "foreignField": "code",      # key field in collection 1
                "as": "linked_collections"   # alias for resulting table
            }},
            {"$project": {"code": 1, "field_from_collection1": 1, "field_from_collection2": 1}}
            ])
    
    #$project is to select fields we need, we could ommit it
    
    for doc in docs:        
        print(doc)
    

    【讨论】:

      【解决方案2】:

      所以我觉得你的问题有两个部分:

      如何使用 pymongo 进行更复杂的查询器? 你如何与 mongo 进行连接?

      第一个问题非常简单,您可以声明任何类型的查询,只需使用find({&lt;your query&gt;})。这是来自W3的示例

      您的主要问题的答案更复杂。这是另一个stack article,在此进行了更详细的讨论。但基本上从 3.2 开始,您可以使用 $lookup 进行连接。

      【讨论】:

        猜你喜欢
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        相关资源
        最近更新 更多