Запрос с объединением для нескольких коллекций с python в MongoDB - PullRequest
0 голосов
/ 18 марта 2020

Я новичок ie для MongoDB и Python (использую pymon go 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

Я нашел только базовые c примеры для запросов с Python в MongoDB. Как этого добиться с Python? Могу ли я использовать .aggregate и $ lookup с Pythonn?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Наконец-то у меня получилось, вот полный код:

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)
0 голосов
/ 18 марта 2020

Так что я чувствую, что на ваш вопрос есть две части:

Как вы делаете более сложные запросы с pymon go? Как сделать объединение с mon go?

Первый вопрос довольно прост: вы можете объявить любой тип запроса и просто использовать find({<your query>}). Вот пример из W3

Ответ на ваш главный вопрос более сложный. Вот еще одна статья стека , в которой говорится более подробно. Но в основном начиная с 3.2 вы можете использовать $lookup для объединения.

...