3

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

我对 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课程适当地链接到我已经存在的数据库和集合吗?

4

2 回答 2

5

将类链接到现有集合的方法可以这样完成,使用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]

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

于 2014-08-26T21:09:09.290 回答
1

我在谷歌上搜索同样的问题,我注意到自上一个答案以来答案已经改变:

根据最新的 Mongoengine 指南:

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

class Page(Document):
meta = {'collection': 'cmsPage'}

灰色的代码起到了作用,我可以立即使用我的数据。

于 2018-07-19T18:26:28.673 回答