标签: mongoengine

拉入mongoengine

我有一个ListField(DictField)包含像 -

{'user_id': '12345', 'timestamp' : 'datetime-object'}
Run Code Online (Sandbox Code Playgroud)

在mongoengine中,如何从user_id上查询的List中删除元素.例如,我想删除具有特定user_id的条目.我试过以下 -

update_one(pull__notes__user_id = '12345')
Run Code Online (Sandbox Code Playgroud)

notes是集合的名称.

此语句返回1但不会从List中删除该元素.我怎样才能做到这一点?

mongodb mongoengine

2
推荐指数
1
解决办法
2469
查看次数

使用MongoEngine自动增量

我正在使用Flask和MongoEngine开发一个博客引擎,我的帖子需要顺序ID.

我需要MongoEngine为每个新帖子创建一个新的ID,所以我想做这样的事情:

class Post(Document):
  title = StringField(required=True)
  content = StringField(required=True)
  published_at = datetime.utcnow()
  id = Post.objects.count() + 1
Run Code Online (Sandbox Code Playgroud)

这会有用吗?有一个更好的方法吗?

python mongodb mongoengine

2
推荐指数
1
解决办法
5254
查看次数

Mongoengine,仅重新获得一些MapField

例如..在Mongodb ..

> db.test.findOne({}, {'mapField.FREE':1})
{
    "_id" : ObjectId("4fb7b248c450190a2000006a"),
    "mapField" : {
            "BOXFLUX" : {
                    "a" : "f",
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

'mapField'字段由Mongoengine的MapField组成.'mapField'字段有一个键和数据的日志..但我只检索'BOXFLUX'..

这个查询在MongoEngine中不起作用....例如..

BoxfluxDocument.objects( ~~ querying ~~ ).only('mapField.BOXFLUX')
Run Code Online (Sandbox Code Playgroud)

你可以看到.. 只有('mapField.BOXFLUX')只有('mapField__BOXFLUX')不起作用.它检索所有'mapField'数据,包括'BOXFLUX'一个..

如何只检索MapField的字段???

python django mongodb pymongo mongoengine

2
推荐指数
1
解决办法
3726
查看次数

如何使用远程主机运行烧瓶和mongoengine?

我在这里关注这个例子:

http://docs.mongodb.org/manual/tutorial/write-a-tumblelog-application-with-flask-mongoengine/

我的问题在于:

from flask import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__)
app.config["MONGODB_DB"] = "my_tumble_log"
app.config["SECRET_KEY"] = "KeepThisS3cr3t"

db = MongoEngine(app)

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

这假设MONGODB_DB在我的本地计算机和默认端口上是"my_tumble_log".如果我的mongo数据库位于具有不同端口的远程计算机上,该怎么办?如何修改示例以允许此操作?

我尝试在MONGODB_DB app.config之前添加一行:

app.config['MONGODB_CONNSTRING'] = "mongodb://myremotehost:myport"
Run Code Online (Sandbox Code Playgroud)

虽然它没有任何影响.

python mongoengine flask

2
推荐指数
1
解决办法
1916
查看次数

mongoengine ReferenceField mongoengine.errors.ValidationError

需要你的帮助.我尝试使用mongoengine,烧瓶,烧瓶登录.

我的模特:

class Post(db.Document):
   text = db.StringField(max_length=240)
   pub_date = db.DateTimeField(default=datetime.datetime.now)
   author = db.ReferenceField(Member)
Run Code Online (Sandbox Code Playgroud)

我得到当前用户(flask-login):

from flask.ext.login import current_user
Run Code Online (Sandbox Code Playgroud)

比在views.py中:

new_post = Post()
    new_post.text = 'bla-bla'
    #new_post.author = current_user                                 #- DON`T WORK
    new_post.author = Member.objects.get(id=current_user.id)        #-WORK (WHY?)
    new_post.save()
Run Code Online (Sandbox Code Playgroud)

有什么错new_post.author = current_user,如果new_post.author = Member.objects.get(id=current_user.id)-工作正常.

如果尝试new_post.author = current_user- 获取错误:

mongoengine.errors.ValidationError
ValidationError: ValidationError (Post:None) (A ReferenceField only accepts DBRef or documents: ['author'])
Run Code Online (Sandbox Code Playgroud)

谢谢,人.

python mongoengine flask flask-login

2
推荐指数
1
解决办法
1679
查看次数

mongoengine来自另一个字段的默认值

我正在尝试使用MongoEngine进行一个项目而且相当不错.我想知道是否可以为另一个字段中的字段设置默认值?像这样的东西

import mongoengine as me

class Company(me.Document):
    short_name = me.StringField(required=True)
    full_name = me.StringField(required=True, default=short_name)
Run Code Online (Sandbox Code Playgroud)

这失败了,错误 ValidationError (Company:None) (StringField only accepts string values: ['full_name'])

:编辑:

我没有提到我的应用程序有一个服务层,使我能够像这样简单地执行:

if company_data['short_name'] is None:
            myCompany.full_name = company_data['short_name']


        obj = myCompany.save()
Run Code Online (Sandbox Code Playgroud)

而且效果很好.

python mongoengine

2
推荐指数
1
解决办法
2950
查看次数

MongoEngine:用upsert/update_one替换get_or_create

我知道get_or_create现在已经弃用了赞成使用upsert,但是如何update_one返回对象而不是修改对象的数量,如果我不想更新任何东西,我可以只检索一个对象吗?

例如

Model.objects.get_or_create(first_name='John', last_name='Potter', age=40)
# assuming that first_name + last_name + age are enough to uniquiely indentify a person   
Run Code Online (Sandbox Code Playgroud)

返回一个Model对象(如果它不存在则为新对象,如果存在,则返回现有对象).使用新方法相当于什么?

Model.objects(first_name='John', last_name='Potter', age=40).update_one(upsert=True)
# returns number of objects (1)
Model.objects(first_name='John', last_name='Potter', age=40).update_one(set__first_name='John', set__last_name='Potter', set__age=40,upsert=True)
# returns number of objects (1)
Run Code Online (Sandbox Code Playgroud)

有没有办法让它返回对象,并使其行为完全像get_or_create

我在文档中找不到如何做到这一点

django mongoengine

2
推荐指数
1
解决办法
3132
查看次数

如何在mongoengine stringfield中返回选择值

嗨,我正在使用带有mongoengine的烧瓶,这是我的模特

class Change(db.Document):
    code = (('CAD', 'Dolar Canadiense'),
            ('GBP', 'Libra Esterlina'),
            ('MXN', 'Peso Mexicano'),
            ('CHF', 'Franco Suiso'),
            ('EUR', 'Euro'),
            ('DKK', 'Corona Danesa'),
            ('SEK', 'Corona Sueka'),
            ('JPY', 'Yen Japones'),
            ('CUP', 'Peso Cubano'),
            ('PAB', 'Balboa Panama'),
            ('AUD', 'Dolar Australiano'),
            ('USD', 'Dolar Estadounidense'),
            ('NOK', 'Corona Noruega'))

    fecha = db.DateTimeField(required = True, unique_with = 'moneda')
    moneda = db.StringField(max_length=3, choices=code, required = True)
    recanje = db.FloatField(required  = True)
    canje = db.FloatField(required = True)

    @db.queryset_manager
    def objects(doc_cls, queryset):
        return queryset.order_by('date')
Run Code Online (Sandbox Code Playgroud)

当我进行查询时,如何获得de选择的值:

moneda = Exchange.objects.distinct("moneda")
Run Code Online (Sandbox Code Playgroud)

返回:

['Dolar …
Run Code Online (Sandbox Code Playgroud)

python mongoengine flask

2
推荐指数
1
解决办法
2561
查看次数

MongoEngine抛出异常TypeError:无法深度复制此模式对象

我在使用list和regex查询查询mongodb模型(Python/MongoEngine)时遇到异常.代码是

from mongoengine import *
import re 

db = connect('testdb')

class Team(Document):
    name = StringField()
    groups = ListField(ReferenceField('Group'))

class Group(Document):
    name = StringField()

Team.drop_collection()
Group.drop_collection()

g1 = Group('G1')
g1.save()

g2 = Group('G2')
g2.save()

g3 = Group('G3')
g3.save()

g4 = Group('G4')
g4.save()

t = Team('Team1',[g1,g2,g3])
t.save()

t = Team('Team2',[g1,g2,g4])
t.save()

t = Team('Team3',[])
t.save()

t = Team('Team3',[g3,g2])
t.save()

t = Team('Team3',[g4,g1])
t.save()


# TypeError: cannot deepcopy this pattern object
teams = Team.objects( Q(groups__in=[g3,g2]) & Q(name=re.compile('eam3')))
for team in teams:
   print team.name …
Run Code Online (Sandbox Code Playgroud)

python regex deep-copy mongoengine

2
推荐指数
1
解决办法
1434
查看次数

MongoEngine:EmbeddedDocument v/s.ReferenceField

EmbeddedDocument将允许将文档存储在另一个文档中,同时RefereneField只存储它的引用.但是,他们实现了类似的目标.他们有特定的用例吗?

PS:已经有一个关于SO 的问题,但没有好的答案.

python mongodb mongoengine

2
推荐指数
1
解决办法
1134
查看次数

标签 统计

mongoengine ×10

python ×8

mongodb ×4

flask ×3

django ×2

deep-copy ×1

flask-login ×1

pymongo ×1

regex ×1