标签: flask-mongoengine

MongoEngine:在DictField中存储EmbeddedDocument

我在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下?

python mongodb nosql mongoengine flask-mongoengine

12
推荐指数
1
解决办法
5320
查看次数

Flask-MongoEngine和PyMongo聚合查询

我正在尝试使用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

11
推荐指数
2
解决办法
5029
查看次数

使用from_json制作的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)

python mongodb pymongo mongoengine flask-mongoengine

9
推荐指数
2
解决办法
5912
查看次数

如何使用mongoengine连接mongodb复制酶?

我正在尝试使用MongoEngine连接到MongoDB副本集?我想连接到任何可用的辅助服务器.

我只能找到pyMongo的例子.有帮助吗?

mongodb mongoengine flask-mongoengine replicaset

8
推荐指数
1
解决办法
3643
查看次数

使用Flask和MongoEngine跟踪Tumblelog应用程序时出错

我在这里关注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"],但仍然得到同样的错误.

python mongodb flask flask-mongoengine

8
推荐指数
1
解决办法
1834
查看次数

麻烦在mongoengine上渲染listfield model_form

我正在使用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)

python mongoengine flask wtforms flask-mongoengine

7
推荐指数
1
解决办法
724
查看次数

嵌入式文档与MongoEngine有关

我使用带有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)

python mongodb mongoengine flask flask-mongoengine

6
推荐指数
1
解决办法
7256
查看次数

在Flask-Mongoengine中切换集合并保存

我无法将文档保存到新集合,然后从旧集合中删除它们.我像这样创建一个新对象:

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.

有人有想法吗?非常感谢.

python mongoengine flask flask-mongoengine

6
推荐指数
1
解决办法
805
查看次数

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: …
Run Code Online (Sandbox Code Playgroud)

mongoengine flask-mongoengine

5
推荐指数
1
解决办法
4125
查看次数

错误未注册flask-mongoengine教程

我开始了这个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)

任何的想法。太感谢了。

mongodb mongoengine flask-mongoengine

5
推荐指数
1
解决办法
2589
查看次数