标签: mongoengine

如何使用mongoengine"插入如果不存在其他更新"?

我正在使用Django中的mongoengine,
这是我的文档定义:

class Location(mongoengine.Document):  
    user_id = mongoengine.IntField(required=True)  
    point = mongoengine.GeoPointField(required=True)
Run Code Online (Sandbox Code Playgroud)

我想这样做:
给定一个user_idpoint:
如果没有文件,有这个user_id,创建一个具有user_idpoint并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?

python django mongodb mongoengine

21
推荐指数
3
解决办法
1万
查看次数

使用mongoengine进入mongodb的多文档插入

在我的烧瓶应用程序中,我使用的是MongoeEgine.我正在尝试将多个文档插入到我的MongoDB中的places集合中.

我的文档类定义为

class places(db.Document):

  name = db.StringField(max_length=200, required=True)    
  loc = db.GeoPointField(required=True)

  def __unicode__(self):
    return self.name

    a=[]
    a.append({"name" : 'test' , "loc":[-87,101]})
    a.append({"name" : 'test' , "loc":[-88,101]})
    x= places(a)
Run Code Online (Sandbox Code Playgroud)

最后一个声明失败了

x= places(a)
TypeError: __init__() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

我也尝试将其保存到我的实例中

places.insert(x)
places.save(x)
Run Code Online (Sandbox Code Playgroud)

都失败了.请帮忙.

python mongodb mongoengine flask

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

如何使用Mongoengine从MongoDB中删除文档?

如何使用Mongoengine从MongoDB中删除文档?我在这里阅读了API参考:
http://docs.mongoengine.org/apireference.html
但我无法理解它是什么:

delete(**write_concern)
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?

mongodb mongoengine

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

MongoDB在mongoengine中使用OR子句

我正在使用python的mongoengine来查询MongoDB,并且大部分都喜欢它,但我遇到了高级查询的问题.

这是我的模特

class ContentItem(Document):
    account = ReferenceField(Account)
    creator = ReferenceField(User)
    public = BooleanField(default=False) 
    last_used = DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

我想查询ContentItem特定帐户的所有帐户,并由登录用户创建或公开.这是我写的查询

query = ContentItem.objects.filter( (Q(account=account) & Q(public=True)) |  (Q(account=account) & Q(creator=logged_in_user)) ).order_by('-last_used')
Run Code Online (Sandbox Code Playgroud)

要么:

query = ContentItem.objects.filter( Q(account=account) & ( Q(public=True) |  Q(creator=logged_in_user) ) ).order_by('-last_used')
Run Code Online (Sandbox Code Playgroud)

但这些似乎是XOR,无论是否public,或者creator两者都有.这是预期的吗?

我忽略了什么吗?我应该直接用mongodb而不是mongoengine吗?

我目前的解决方法是制作两个不同的查询并合并结果,但随着内容项的数量变大,结果需要很长时间才能回来,因为我需要在订购之前获取所有项目,从而失去所有项目(django)分页结果的好处.

python mongodb mongoengine

18
推荐指数
3
解决办法
1万
查看次数

烧瓶和蒙古

考虑到完全建立在MongoDB之上的Web服务,虽然我对PyMongo很有帮助,但我想知道你们是否对这些ODM中的任何一个有任何积极或消极的经历/故事:MongoKit,MongoEngine和MongoAlchemy,后者有一个Flask特定包装"Flask-mongoalchemy".

mongodb mongoengine flask mongokit

17
推荐指数
2
解决办法
8702
查看次数

在Flask-Admin中处理MongoEngine的DynamicEmbeddedDocument

我有一个问题,我找不到一个简单的解决方案,使用Flask-Admin和MongoEngine.我有一个名为的Document类ExerciseResourceContent.它有一个"问题"属性,它是一个ListField一个的EmbeddedDocumentExerciseQuestion:

class ExerciseResourceContent(ResourceContent):
    """An exercise with a list of questions."""

    ## Embedded list of questions
    questions = db.ListField(db.EmbeddedDocumentField(ExerciseQuestion))
Run Code Online (Sandbox Code Playgroud)

ExerciseQuestion文件实际上是DynamicEmbeddedDocument:

class ExerciseQuestion(db.DynamicEmbeddedDocument):
    """
    Generic collection, every question type will inherit from this.
    Subclasses should override method "without_correct_answer" in order to define the version sent to clients.
    Subclasses of questions depending on presentation parameters should also override method "with_computed_correct_answer".
    """

    _id = db.ObjectIdField(default=ObjectId)

    ## Question text
    question_text = db.StringField(required=True)

    ## …
Run Code Online (Sandbox Code Playgroud)

python mongoengine flask flask-admin

16
推荐指数
1
解决办法
789
查看次数

使用MongoEngine Document类方法进行自定义验证和预保存挂钩

我目前正在探索MongoEngine"对象文档映射器"的可能性.目前我不清楚的是,我可以在多大程度上将验证和对象创建逻辑移动到Document对象本身.

我的印象是它应该不是问题,但我没有找到很多关于问题的例子/警告/最佳实践

  • 自定义验证函数,在save()上自动调用,以评估字段内容是否有效;
  • 根据字段内容的哈希值在save()上自动生成标识符;

我想我需要覆盖save()方法,以便我可以调用我的自定义逻辑,但是缺少示例会让我相信这可能是一种错误的方法......

任何示例或对使用mongoEngine的高质量代码库的引用都是受欢迎的.

python validation mongodb mongoengine

14
推荐指数
3
解决办法
1万
查看次数

更新mongoengine中的嵌入文档列表

我正在努力使用mongoengine语法.

我有以下型号......

class Post(EmbeddedDocument):
    uid = StringField(required=True)
    text = StringField(required=True)
    when = DateTimeField(required=True)


class Feed(Document):
    label = StringField(required=True)
    feed_url = StringField(required=True)
    posts = ListField(EmbeddedDocumentField(Post))

    def my_method(self, post):
        pass
Run Code Online (Sandbox Code Playgroud)

...并且将post对象传递给my_method,我想更新现有帖子,如果它存在于具有匹配uid的self.posts中,或者如果不存在则推送到self.posts.

在mongoengine的一次调用中是否有语法?

python mongodb pymongo mongoengine

13
推荐指数
1
解决办法
8613
查看次数

MongoEngine - 如何自定义用户模型/自定义后端进行身份验证()

摘要

如何使用Django + MongoEngine 自定义用户模型自定义身份验证后端(以允许电子邮件/密码身份验证)? (是否需要自定义后端?...即,在使用MongoEngine进行身份验证时使用电子邮件作为用户名.)

在使用Django进行身份验证时,使用Mongo作为主数据存储区时,是否存在使用自定义用户对象的直接(且完整!)示例的文档?(Postgres有更清晰,更全面的文档...)


详情

MongoEngine似乎只为您提供两种身份验证 - "经典"(又名" mongoengine.django.auth.MongoEngineBackend ")方式......或者......"自定义用户模型"(又名' django.contrib.auth) .backends.ModelBackend ')方式 - 在Nicolas Cortot对这里的另一个问题的回答中或多或少简洁地概述了这两种方式:

Python-Social-Auth失败了mongoEngine(Django)

这两种身份验证技术都允许您访问类似于Django的AbstractBaseUser类的authenticate()方法 - 一种依赖于check_password函数的方法.但是,你分钟使用身份验证(如上面的链接概述)的所谓的"自定义用户模型"的味道...... 随后一对用自定义后端(为了使用电子邮件,要求用户名)......你由于无法访问典型的authenticate()函数而遇到麻烦.

例如,像这样......

accounts.models.py


# ...with postgres, I'd subclass AbstractBaseUser...but with Mongo...(?)

from django.conf import settings
from mongoengine.fields import EmailField, BooleanField 
from mongoengine.django.auth import User class MyUser(User): email = EmailField(max_length=254, unique=True) is_active = BooleanField(default=True) is_admin = BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = '' ... …

authentication django custom-backend mongoengine

13
推荐指数
1
解决办法
3207
查看次数

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
查看次数