У меня есть система, которая сканирует данные и добавляет данные в MongoDB с помощью Morphia.с другой стороны, у меня есть веб-приложение Flask с Mongoengine, которое считывает данные и представляет их пользователю.
это определение на стороне 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"}}
}
]}
, а Morphia добавляет данные следующим образом:
{"_id": 5, "genericThing": [
{"$ref": "A", "$id": {"$oid": "5b8394ab1288ba5854a78fa2"}},
{"$ref": "B", "$id": {"$oid": "5b8394ab1288ba5854a78fa3"}}
]}
чтение данныхЯ вставил с MongoEngine отлично работает
есть ли способ заставить MongoEngine читать данные без поля _cls.потому что решение, которое я могу придумать в настоящее время, заключается в том, чтобы просмотреть данные прямо перед тем, как я получу к ним доступ и исправлю их в хитрости фокусов MongoDB.какие-либо другие предложения?