Есть ли способ заставить 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. какие-либо другие предложения?

0 ответов

Другие вопросы по тегам