Есть ли способ заставить GenericReferenceField работать без атрибутов _cls, добавленных mongoengine
У меня есть система, которая сканирует данные и добавляет данные в MongoDB с помощью Morphia. с другой стороны, у меня есть веб-приложение Flask с Mongoengine, которое считывает данные и представляет их пользователю.
это определение в моноинженерной стороне
class Box(Document):
dataJoinedToBothClass = StringField()
genericThing = ListField(GenericReferenceField())
meta = {'collection': 'Box'}
class ABS(Document):
abs = StringField()
meta = {'abstract': True}
class A(ABS):
a = StringField()
meta = {'collection': 'A'}
class B(ABS):
b = StringField()
meta = {'collection': 'B'}
когда я пытаюсь прочитать поле genericThing, как это:
box_doc = Box.documents().first()
box_doc.genericThing
я получаю следующую ошибку: AttributeError: у объекта 'GenericReferenceField' нет атрибута '_get_db'
Я попытался добавить некоторые данные с Mognoengine (в той же структуре, определенной в Morphia), и кажется, что Mongoengine добавляет DBRef следующим образом:
{"_id": 5, "genericThing": [
{
"_cls": "A",
"_ref": {"$ref": "A", "$id": {"$oid": "5b8394ab1288ba5854a78fa2"}}
},
{
"_cls": "B",
"_ref": {"$ref": "B", "$id": {"$oid": "5b8394ab1288ba5854a78fa3"}}
}
]}
и Морфия добавляет данные следующим образом:
{"_id": 5, "genericThing": [
{"$ref": "A", "$id": {"$oid": "5b8394ab1288ba5854a78fa2"}},
{"$ref": "B", "$id": {"$oid": "5b8394ab1288ba5854a78fa3"}}
]}
чтение данных, которые я вставил с MongoEngine, работает нормально
Есть ли способ заставить MongoEngine читать данные без поля _cls. потому что решение, которое я могу придумать в настоящее время, состоит в том, чтобы просмотреть данные прямо перед тем, как я получу к ним доступ и исправлю их в хитрости фокусов MongoDB. какие-либо другие предложения?