我想试试Mongodb w/mongoengine.我是Django和数据库的新手,我很适合外键,联接,循环导入(你的名字).我知道我最终可以解决这些问题,但Mongo对于我正在做的事情来说似乎是一个更简单的解决方案.我的问题是我使用了很多可插拔的应用程序(Imagekit,Haystack,注册等),并想知道如果我进行切换这些应用程序是否会继续工作.我是否会遇到任何已知的头痛问题,如果是这样的话,我可能会继续用MySQL来解决问题.
我使用mongodb作为Django 1.5应用程序中的一些信息的存储后端.
存储在mongodb集合中的每个文档都有一个_id字段,这是一个由几个字符串组成的字典.现在,当我尝试检索此信息时,我使用mongoengine将文档映射到模型类:
from mongoengine import *
class MyClass(Document):
_id = DictField()
Run Code Online (Sandbox Code Playgroud)
在我看来:
documents = MyClass.objects
print documents
Run Code Online (Sandbox Code Playgroud)
当我打电话给视图时,我得到了一个 TypeError
TypeError at /viewname/
id must be an instance of (str, unicode, ObjectId), not <type 'dict'>
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,当我使用save rutine时
obj = MyClass({"tag":"sometag"})
obj.save()
Run Code Online (Sandbox Code Playgroud)
我得到exat相同的错误,但在db集合_id={"tag":"sometag"}中创建了文档.
什么可能发生的想法?它可能与此处发生的情况相同
注意:我尝试使用EmbeddedDocumentField,但结果是一样的(错误采用我的嵌入式类名而不是'dict')
如果model包含ListField(db.ReferenceField))并且在查询名为to_json()ir 之后不将子转换为json,则将其保留为OID.有没有办法轻松地将(至少到X深层次)孩子转换为json?
"data": {
"articles": [],
"category": {
"_id": {
"$oid": "5224905453f0462f5458a724"
},
"children": [
{
"$oid": "5224905453f0462f5458a725"
},
{
"$oid": "5224905453f0462f5458a726"
},
{
"$oid": "5224905453f0462f5458a727"
},
{
"$oid": "5224905453f0462f5458a728"
}
],
...........
Run Code Online (Sandbox Code Playgroud) 如何运行以下命令:
someQuerySet.filter(keyword='someKey')
someQuerySet.filter(keyword='someOtherKey')
Run Code Online (Sandbox Code Playgroud)
InvalidQueryError: Duplicate query conditions每当我尝试这样做时,我都会得到。我知道可以按值列表进行过滤,但现在,我需要进行单独的过滤。
后来编辑:我实际上正在使用:
someQuerySet.filter(keyword__ne='someKey')
someQuerySet.filter(keyword__ne='someOtherKey')
Run Code Online (Sandbox Code Playgroud) 如何将数据添加到 mongoengine 的字典中?
我没有再次保存整个字典的数据,我一次只想添加一个项目。
我试过使用:
Lookups.objects(pk="52d3a8e318fbaf0e1075de4f").update(push__schools=new_schools)
Run Code Online (Sandbox Code Playgroud)
但我认为这不起作用的原因push是将项目添加到列表,而不是字典。谁能帮帮我吗?
我有这个模型:
class SourceModel(Document):
name = StringField(
primary_key=True,
max_length=50,
required=True,
)
# some fields
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码时:
for source in SOURCES:
SourceModel(**source).save()
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
mongoengine.errors.NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error index: mirad.source_model.$name_1 dup key: { : null })
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生此错误,原因unique是我的模型中没有此字段。我将此代码更改为:
for source in SOURCES:
try:
SourceModel(**source).save()
except NotUniqueError:
old_source = SourceModel.objects(name=source['name']).first()
print old_source # this line print None
Run Code Online (Sandbox Code Playgroud)
为什么
我想知道是否有办法使用 Mongoengine 在 MongoDB 集合的列中获得最大值。是否可以?
我有以下 Django 模型:
from mongoengine import *
from datetime import datetime
class Company(Document):
name = StringField(max_length=500)
class Feedback(Document):
text = StringField(max_length=500)
is_approved = BooleanField(default=False)
date = DateTimeField(default=datetime.now())
Run Code Online (Sandbox Code Playgroud)
我想在公司中添加许多反馈字段
提前致谢。
在mongoengine有一个集合中查询对象(文件)的方法有两种:
Test.object(category="blabla")
Run Code Online (Sandbox Code Playgroud)
和
Test.object.filter(category="blabla")
Run Code Online (Sandbox Code Playgroud)
他们返回相同的结果。但问题是有什么区别?表现?或者他们只是彼此的别名?
我的文档具有一些EmbeddedDocumentList,每个EmbeddedDocument应该具有自动生成的ObjectId(如_id)字段,因为我将编写查询以使用此_id字段获取单个EmbeddedDocument。
如何达到?
mongoengine ×10
mongodb ×8
python ×6
django ×3
python-2.7 ×2
dictionary ×1
model ×1
orm ×1
pymongo ×1