MongoEngine — загрузить все ссылочные документы

#mongodb #mongoengine

#mongodb #mongoengine

Вопрос:

Допустим, у меня есть две коллекции в моем mongodb, product и color они определены как

 class Color(Extended):
    name = StringField()

class Product(Extended):
    name = StringField()
    colors = ListField(ReferenceField(Color, dbref=True))
 

И что у меня есть документ

 {
    "_id" : ObjectId("61b1080d361ca805e35bafa5"),
    "_cls" : "Product",
    "name" : "name",
    "colors" : [ 
        {
            "$ref" : "color",
            "$id" : ObjectId("61b108e418a1aacb47c3a15f")
        }
    ]
}
 

Обычно я делаю запросы типа

 Product.objects.get(id=_id).to_json()
 

Но это возвращает только

 {
    "_id" : ObjectId("61b1080d361ca805e35bafa5"),
    "_cls" : "Product",
    "name" : "name",
    "colors" : [ 
        {
            "$ref" : "color",
            "$id" : ObjectId("61b108e418a1aacb47c3a15f")
        }
    ]
}
 

Как я могу автоматически извлекать документы, на которые есть ссылки?

Комментарии:

1. Это похоже на python.

2. Кажется, у вас есть две возможности — 1.) использовать $lookup в конвейере агрегации или 2.) определить метод глубокого гидратации mongoengine . NodeJS Mongoose имеет аналогичную концепцию, называемую Populate() — см. geeksforgeeks.org/mongoose-populate-method

3. Кстати, желательно убедиться, что драйвер PyMongo, используемый mongoengine, совместим с используемой вами версией MongoDB. Определение версии драйвера может быть непростым делом.