在 MongoDB 中使用 python 连接多个集合进行查询

Query with join on mutiple collections with python in MongoDB

我是 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 实现这一目标?我可以将 .aggregate 和 $lookup 与 Pythonn 一起使用吗?

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

如何使用 pymongo 进行更复杂的查询? 你如何加入 mongo?

第一个问题很简单,您可以声明任何类型的查询,只需使用 find({<your query>})。这是来自 W3

的示例

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

我终于让它工作了,这里是完整的代码:

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)