我有从DB和wat中检索的文档以选择任何其他排除此文档.我试过以下查询:
{'email': u'test@mail.com', 'id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}
{'email': u'test@mail.com', 'pk': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}
{'email': u'test@mail.com', '_id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}
Run Code Online (Sandbox Code Playgroud)
最后一个是MongoDB控制台的有效查询,前两个 - 我试图传递给我的查询对象的查询失败并显示错误消息:
>>>User.object.query(my_query)
ValidationError: {'$ne': ObjectId('51f7f13fca798933a0c70f69')} is not a valid ObjectId
Run Code Online (Sandbox Code Playgroud)
怎么解决?
是否可以在 Django 和 MongoEngine 中使用自定义 _id 字段?问题是,如果我尝试将字符串保存到 _id 字段,则会引发 Invalid ObjectId 错误。我想要做的是使用我自己的 ID。如果不使用 Django,这从来都不是问题,因为如果给定的 id 已经存在,我会在创建时捕获 DuplicateKeyError(这甚至有必要告诉程序,这个 ID 已经被占用)现在似乎 Django/MongoEngine 不会甚至让我创建一个自定义 _id 字段 :-/ 有没有办法解决这个问题,而无需为 ID 创建第二个字段并让 _id 字段自己创建?
问候 Codehai
如何在 marshmallow_mongoengine 中取消引用 ReferenceFields?例如,dump_data = author_schema.dump(author).dataresults in'5578726b7a58012298a5a7e2'而不是更有用的 response {title='Fight Club', author=author}。
from marshmallow_mongoengine import ModelSchema
class AuthorSchema(ModelSchema):
class Meta:
model = Author
class BookSchema(ModelSchema):
class Meta:
model = Book
author_schema = AuthorSchema()
author = Author(name='Chuck Paluhniuk').save()
book = Book(title='Fight Club', author=author).save()
dump_data = author_schema.dump(author).data
# {'id': 1, 'name': 'Chuck Paluhniuk', 'books': ['5578726b7a58012298a5a7e2']}
author_schema.load(dump_data).data
# <Author(name='Chuck Paluhniuk')>
Run Code Online (Sandbox Code Playgroud) 我已经使用 pip 安装了 DjangoRest 框架和 Mongo 引擎,包含rest_framework_mongoengine在INSTALLED_APPS列表中。当我运行服务器时仍然抛出异常。
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 227 行,包装器 fn(*args, **kwargs)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/core/management/commands/runserver.py”,第 117 行,inner_run autoreload.raise_last_exception()
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 250 行,在 raise_last_exception Six.reraise(*_exception) 中
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/utils/autoreload.py”,第 227 行,包装器 fn(*args, **kwargs)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/ init .py”,第 27 行,在 setup apps.populate(settings.INSTALLED_APPS) 中
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/apps/registry.py”,第 85 行,填充 app_config = AppConfig.create(entry)
文件“/Users/anum/Desktop/Python/ConnectBox/env/lib/python2.7/site-packages/django/apps/config.py”,第 94 行,在 create module = import_module(entry) 中
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/ init .py”,第 37 行,在 import_module import (name)中
导入错误:没有名为rest_framework_mongoengine的模块
这是我的Settings.py。
使用pip list命令,列出了以下软件包:
Django (1.11.2)
djangorestframework (3.6.3)
mongoadmin (0.2)
mongodbforms (0.3)
mongoengine (0.13.0)
pip …Run Code Online (Sandbox Code Playgroud) 此代码返回一个我不明白的错误:
Run Code Online (Sandbox Code Playgroud)query = Analytic.objects(uid__type="binData") analytics = [] for analytic in query: analytic.sessionId = str(analytic.sessionId) analytic.uid = str(analytic.uid) analytics.append(analytic) if len(analytics) % 10000 == 0: print(".") if len(analytics) == 100000: Analytic.objects.update(analytics, upsert=False) analytics = []类型错误:update() 获得参数“upsert”的多个值
作为来自 DynamoDB 的人,对 MongoDB 模式进行建模以真正融入我的应用程序有点令人困惑,特别是因为它具有引用的概念,并且不建议从我阅读的内容中保留重复数据以适应您的查询。
以下面的例子为例(在 mongoengine 中建模,但应该无关紧要):
#User
class User(Document):
email = EmailFieldprimary_key=True)
pswd_hash = StringField()
#This also makes it easier to find the Projects the user has a Role
roles = ListField(ReferenceField('Role')
#Project
class Project(Document):
name = StringField()
#This is probably unnecessary as the Role id is already the project id
roles = ListField(ReferenceField('Role'))
#Roles in project
class Role(Document):
project = ReferenceField('Project', primary_key=True)
#List of permissions
permissions = ListField(StringField())
users = ListField(ReferenceField('User')
Run Code Online (Sandbox Code Playgroud)
有项目和用户。
每个 …
我有一堂课:
\nclass POI(Document):\n location = PointField(required=True)\n name = StringField(default='')\n generate_by = IntField(required=True)\n status = StringField(default='Active')\n colle\xd1\x81ted_by = IntField()\n time_created = DateTimeField(default=datetime.datetime.now)\nRun Code Online (Sandbox Code Playgroud)\n当我尝试插入时
\nPOI(location=[55.430212, 30.521000], generate_by=1241254, name="Sample", collected_by=None)\nRun Code Online (Sandbox Code Playgroud)\n发生错误
\nmongoengine.errors.FieldDoesNotExist: The fields "{'collected_by'}" do not exist on the document "POI"\nRun Code Online (Sandbox Code Playgroud)\n怎么了?
\n