#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-method3. Кстати, желательно убедиться, что драйвер PyMongo, используемый mongoengine, совместим с используемой вами версией MongoDB. Определение версии драйвера может быть непростым делом.