【问题标题】:Mongoengine Link to Existing CollectionMongoengine 链接到现有集合
【发布时间】:2014-08-23 22:35:08
【问题描述】:

我正在为我的最新 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 类适当地链接到我已经存在的数据库和集合?

【问题讨论】:

    标签: mongoengine flask-mongoengine


    【解决方案1】:

    可以使用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]
    

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

    【讨论】:

      【解决方案2】:

      我在谷歌上搜索了同样的问题,我注意到答案与上一个答案相比发生了变化:

      根据最新的 Mongoengine 指南:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2013-08-12
        相关资源
        最近更新 更多