我正在使用Django中的mongoengine,
这是我的文档定义:
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
Run Code Online (Sandbox Code Playgroud)
我想这样做:
给定一个user_id和point:
如果没有文件,有这个user_id,创建一个具有user_id和point并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?
在我的烧瓶应用程序中,我使用的是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)
都失败了.请帮忙.
如何使用Mongoengine从MongoDB中删除文档?我在这里阅读了API参考:
http://docs.mongoengine.org/apireference.html
但我无法理解它是什么:
delete(**write_concern)
Run Code Online (Sandbox Code Playgroud)
你有什么主意吗?
我正在使用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)分页结果的好处.
考虑到完全建立在MongoDB之上的Web服务,虽然我对PyMongo很有帮助,但我想知道你们是否对这些ODM中的任何一个有任何积极或消极的经历/故事:MongoKit,MongoEngine和MongoAlchemy,后者有一个Flask特定包装"Flask-mongoalchemy".
我有一个问题,我找不到一个简单的解决方案,使用Flask-Admin和MongoEngine.我有一个名为的Document类ExerciseResourceContent.它有一个"问题"属性,它是一个ListField一个的EmbeddedDocument叫ExerciseQuestion:
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) 我目前正在探索MongoEngine"对象文档映射器"的可能性.目前我不清楚的是,我可以在多大程度上将验证和对象创建逻辑移动到Document对象本身.
我的印象是它应该不是问题,但我没有找到很多关于问题的例子/警告/最佳实践
我想我需要覆盖save()方法,以便我可以调用我的自定义逻辑,但是缺少示例会让我相信这可能是一种错误的方法......
任何示例或对使用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的一次调用中是否有语法?
摘要
如何使用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()函数而遇到麻烦.
例如,像这样......
# ...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 = '' ... …
我在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下?
mongoengine ×10
mongodb ×8
python ×7
flask ×3
django ×2
flask-admin ×1
mongokit ×1
nosql ×1
pymongo ×1
validation ×1