Mongoengine链接到现有集合

时间:2014-08-23 22:35:09

标签: mongoengine flask-mongoengine

我正在使用Flask / Mongoengine-MongoDB获取最新的Web应用程序。

我熟悉Pymongo,但我是像Mongoengine这样的对象文档映射器的新手。

我已经设置了数据库和集合,我基本上只想查询它并返回相应的对象。这是我的models.py ...

from app import db

# ----------------------------------------
# Taking steps towards a working backend.
# ----------------------------------------

class Property(db.Document):

    # Document variables.
    total_annual_rates = db.IntField()
    land_value = db.IntField()
    land_area = db.IntField()
    assessment_number = db.StringField(max_length=255, required=True)
    address =  db.StringField(max_length=255, required=True)
    current_capital_value = db.IntField
    valuation_as_at_date = db.StringField(max_length=255, required=True)
    legal_description = db.StringField(max_length=255, required=True)
    capital_value = db.IntField()
    annual_value = db.StringField(max_length=255, required=True)
    certificate_of_title_number = db.StringField(max_length=255, required=True)

    def __repr__(self):
        return address

    def get_property_from_db(self, query_string):
        if not query_string:
            raise ValueError()
        # Ultra-simple search for the moment.
        properties_found = Property.objects(address=query_string)
        return properties_found[0]

我得到的错误如下:IndexError: no such item for Cursor instance

这是完全合理的,因为对象没有指向任何集合。尽管拖延了一段时间的文档,我仍然不知道如何做到这一点。

你们中的任何人都知道如何将我的Property课程与我现有的数据库和馆藏联系起来吗?

2 个答案:

答案 0 :(得分:3)

使用meta可以实现将类链接到现有集合的方法:

class Person(db.DynamicDocument):

    # Meta variables.
    meta = {
        'collection': 'properties'
    }

    # Document variables.
    name = db.StringField()
    age = db.IntField()

然后,当使用类对象时,实际上可以使用MongoEngine可能预期的功能:

desired_documents = Person.objects(name="John Smith")
john = desired_documents[0]

或类似的东西:)希望这有帮助!

答案 1 :(得分:0)

我正在搜索相同的问题,但我注意到答案自上一个答案以来已发生变化:

根据最新的Mongoengine指南:

  

如果您需要更改集合的名称(例如,将MongoEngine与现有的集合一起使用   数据库),然后在您的文档上创建一个名为meta的类字典属性,并将collection设置为   您希望文档类使用的集合的名称:

.format("org.apache.spark.sql.execution.datasources.jdbc.DefaultSource")

灰色代码可以解决问题,我可以立即使用数据。