Есть ли способ заставить GenericReferenceField работать без атрибутов _cls, добавленных mongoengine - PullRequest
0 голосов
/ 27 августа 2018

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

...