我正在使用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
课程与我现有的数据库和馆藏联系起来吗?
答案 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")
灰色代码可以解决问题,我可以立即使用数据。