MongoEngine возвращает пустой список

У меня есть база данных с именем suvaider. Он содержит две коллекции Relation и Reviews. Я заполнил эти два, импортировав из файлов json. Я создал модели для этих двух коллекций. Но при попытке использовать эти модели для получения данных с помощью mongoengine он возвращает пустой массив. Я новичок, впервые использую mongodb с флягой. Заранее спасибо!!!

# This is models.py 
    from flask import url_for
    from suvaiderBackend import db

    class Hotels(db.EmbeddedDocument):
        property_id = db.StringField(max_length=255,required=True)
        name = db.StringField(max_length=255,required=True)

    class Relation(db.Document):
        parent = db.EmbeddedDocumentField('Hotels')
        units = db.ListField(db.EmbeddedDocumentField('Hotels'))

    class Reviews(db.Document):
        property_id = db.StringField(max_length=255,required=True)
        rating = db.IntField(default=0)
        review = db.StringField()
        sentiment = db.StringField(max_length=255)
        review_link = db.StringField()

 #This is __init__.py
        from flask import Flask 
        from flask.ext.mongoengine import MongoEngine
        app = Flask(__name__)
        app.config["MONGODB_SETTINGS"] = {'DB': "suvaider"}
        app.config["SECRET_KEY"] = "Keep3H9Secret"

        db = MongoEngine(app)

        if __name__ == '__main__':
             app.run(debug=true)

person tirthbal    schedule 08.08.2016    source источник


Ответы (2)


Согласно документации, Mongoengine по умолчанию преобразует имя вашего класса Document в в нижнем регистре и используйте его как имя коллекции. Итак, в вашем примере он ищет коллекции с именами: отношения и обзоры. Поскольку у вас есть база данных с разными коллекциями (обратите внимание на написание - первая буква в верхнем регистре), вы должны установить собственное имя коллекции, добавив

meta = {'collection': 'collectionName'}

к вашим документам.

class Relation(db.Document):
    parent = db.EmbeddedDocumentField('Hotels')
    units = db.ListField(db.EmbeddedDocumentField('Hotels'))
    meta = {'collection': 'Relation'}

class Reviews(db.Document):
    property_id = db.StringField(max_length=255,required=True)
    rating = db.IntField(default=0)
    review = db.StringField()
    sentiment = db.StringField(max_length=255)
    review_link = db.StringField()
    meta = {'collection': 'Reviews'}
person mateuszb    schedule 17.08.2016

В принципе, я обнаружил, что добавление

'allow_inheritance': True

в вашей мете mongoengine каким-то образом возвращает пустые списки. Так что избавление от него помогло мне.

person Alveona    schedule 26.08.2019