我在MongoEngine中为一个Web项目建模一个MongoBD数据库.我想以稍微不寻常的方式存储数据,以便以后能够有效地查询它.
我们在MongoDB中的数据看起来像这样:
// "outer"
{
"outer_data": "directors",
"embed": {
"some_md5_key": { "name": "P.T. Anderson" },
"another_md5_key": { "name": "T. Malick" },
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是在MongoEngine中对此进行建模:
class Inner(EmbeddedDocument):
name = StringField()
class Outer(Document):
outer_data = StringField()
embed = DictField(EmbeddedDocument(Inner)) # this isn't allowed but you get the point
Run Code Online (Sandbox Code Playgroud)
换句话说,我基本上想要的是将ListDocument存储在ListField中,而是存储在DictField中,每个EmbeddedDocument都有动态键.
ListField 允许引用的示例:
class Inner(EmbeddedDocument):
inner_id = StringField(unique=True) # this replaces the dict keys
name = StringField()
class Outer(Document):
outer_data = StringField()
embed = ListField(EmbeddedDocument(Inner))
Run Code Online (Sandbox Code Playgroud)
我还希望在仍然使用DictField + EmbeddedDocument(作为dict"value")的同时为嵌套的"Inner"文档返回MongoEngine对象.我如何在MongoEngine中对此进行建模?它是否可能或者我是否必须天真地将所有数据置于通用DictField下?
我正在尝试使用flask-mongoengine进行聚合查询,从我所看到的内容听起来并不可能.
我查看了几个论坛主题,电子邮件链和Stack Overflow上的一些问题,但我还没有找到一个如何用flask-mongoengine实现聚合的一个很好的例子.
这个问题中有一条评论说你必须使用"原始pymongo和聚合功能".但是,没有关于如何工作的例子.我已经修改了Python并使用Flask框架进行了基本的应用程序,但是深入研究完整的应用程序以及连接/查询Mongo对我来说是一个新手.
有人可以提供一个示例(或示例的链接),我可以如何利用我的flask-mongoengine模型,但是使用PyMongo的聚合框架进行查询?这需要两个连接到MongoDB(一个用于PyMongo执行聚合查询,另一个用于通过MongoEngine进行常规查询/插入/更新)?
我想要执行的聚合查询的示例如下(此查询获取了我在Mongo shell中所需的信息):
db.entry.aggregate([
{ '$group' :
{ '_id' : { 'carrier' : '$carrierA', 'category' : '$category' },
'count' : { '$sum' : 1 }
}
}
])
Run Code Online (Sandbox Code Playgroud)
此查询的输出示例:
{ "_id" : { "carrier" : "Carrier 1", "category" : "XYZ" }, "count" : 2 }
{ "_id" : { "carrier" : "Carrier 1", "category" : "ABC" }, "count" : 4 }
{ "_id" : { "carrier" : "Carrier 2", "category" : "XYZ" }, "count" : …Run Code Online (Sandbox Code Playgroud) python mongodb pymongo aggregation-framework flask-mongoengine
我正在尝试使用from_json方法构建一个文档对象.object.save()不会抛出任何错误,但文档未插入mongo.
另一方面,如果我通过为每个字段赋值来创建对象,它可以正常工作.
我无法找到原因.以下是两种情况的代码.
from flask import Flask
from flask.ext.mongoengine import MongoEngine
import json, datetime
app = Flask(__name__)
app.config["MONGODB_SETTINGS"] = {'DB': 'test','host': 'localhost'}
app.config["SECRET_KEY"] = "mySecretKey"
db = MongoEngine(app)
class User(db.Document):
user_id = db.StringField(max_length=16, primary_key = True)
username = db.StringField(min_length=8)
email = db.EmailField(required = True, unique = True)
password = db.StringField(required = True)
date_of_birth = db.DateTimeField()
gender = db.StringField(choices = ('M', 'F'))
'''
This one works. This will add a user in local mongodb(test)
'''
u1 = User()
u1.username = 'test12345' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MongoEngine连接到MongoDB副本集?我想连接到任何可用的辅助服务器.
我只能找到pyMongo的例子.有帮助吗?
我在这里关注tumbleblog应用程序
我的__init__.py:
from flask import Flask
from flask.ext.mongoengine import MongoEngine
app = Flask(__name__)
app.config["MONGODB_SETTINGS"] = {'DB': "sencha_web_service", 'username': "<username>", "password": "<password>"}
app.config["SECRET_KEY"] = "KeepThisS3cr3t"
db = MongoEngine(app)
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
mongoengine.connection.ConnectionError: Cannot connect to database default :
False is not a read preference.
Run Code Online (Sandbox Code Playgroud)
我想传递"alias"="default"的 app.config["MONGODB_SETTINGS"],但仍然得到同样的错误.
我正在使用Flask,mongoengine进行项目,我正在尝试从http://docs.mongodb.org/manual/tutorial/write-a-tumblelog-application-with-flask-mongoengine/获取基本的东西.
从上面的链接实现了所有内容后,我在Post中为"tags"添加了一个新字段,当我尝试创建帖子时,我的标签没有显示输入框.
任何帮助表示赞赏.
我的代码如下
class Post(db.Document):
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
title = db.StringField(max_length=255, required=True)
slug = db.StringField(max_length=255, required=True)
body = db.StringField(required=True)
views = db.IntField(default=0)
category = db.StringField()
tags = db.ListField(db.StringField(max_length=30))
Run Code Online (Sandbox Code Playgroud)
模板
{% macro render(form) -%}
<fieldset>
{% for field in form %}
{% if field.type in ['CSRFTokenField', 'HiddenField'] %}
{{ field() }}
{% else %}
<div class="clearfix {% if field.errors %}error{% endif %}">
{{ field.label }}
<div class="input">
{% if field.type == 'ListField' %}
{% for subfield in …Run Code Online (Sandbox Code Playgroud) 我使用带有Flask-MongoEngine的MongoDB作为我的网络应用程序的ORM组件.
我已经构建了User文档架构,如下所示:
from ..core import db
class UserComics(db.EmbeddedDocument):
favorites = db.SortedListField(db.StringField(), default=None)
class UserSettings(db.EmbeddedDocument):
display_favs = db.BooleanField(default=False)
default_cal = db.StringField(default=None)
show_publishers = db.ListField(db.StringField(), default=None)
class UserTokens(db.EmbeddedDocument):
refresh_token = db.StringField(default=None)
access_token = db.StringField(default=None)
expire_time = db.StringField(default=None)
class User(db.Document, UserMixin):
# Save User document to this collection
meta = {'collection': 'users_test'}
userid = db.StringField()
full_name = db.StringField()
first_name = db.StringField()
last_name = db.StringField()
gender = db.StringField()
birthday = db.StringField()
email = db.EmailField()
friends = db.ListField(db.StringField())
date_creation = db.DateTimeField()
last_login = db.DateTimeField()
favorites …Run Code Online (Sandbox Code Playgroud) 我无法将文档保存到新集合,然后从旧集合中删除它们.我像这样创建一个新对象:
class Test(mongo.Document):
field = mongo.StringField()
t = Test(field="test")
t.switch_collection('default')
t.save()
t.switch_collection('switched')
t.save()
t.switch_collection('default')
t.delete()
Run Code Online (Sandbox Code Playgroud)
似乎只执行第一次保存到默认集合,然后执行任何操作.我玩了很多差异选项,比如每次切换/保存后重新加载对象以及mongoengine上下文管理器:
with switch_collection(Test, 'mongoswitch') as test:
test(field="switch").save()
Run Code Online (Sandbox Code Playgroud)
我的mongo设置看起来像(先叫):
app.config["MONGODB_SETTINGS"] = {'db': 'TestDB'}
mongo = MongoEngine(app)
Run Code Online (Sandbox Code Playgroud)
使用mongoengine 0.10和pymongo 2.8.1和Python 3.4.
有人有想法吗?非常感谢.
我正在使用 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: …Run Code Online (Sandbox Code Playgroud) 我开始了这个Turial,在这里
并得到这个错误
**mongoengine.errors.NotRegistered:** `Comment` has not been registered in the document registry. Importing the document class automatically registers it, has it been imported?
Run Code Online (Sandbox Code Playgroud)
任何的想法。太感谢了。