MongoDB 允许在嵌入文档内的键上建立索引:
db.things.ensureIndex({"address.city": 1})
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 mongoengine 做到这一点?
我有两个文件
class Book(Document):
title = StringField()
publication = StringField()
no_of_pages = IntField()
desc = StringField()
reviews = ListField(ReferenceField(Review))
...
class Author(Document):
name = StringField()
books = ListField(ReferenceField(Book))
desc = StringField()
...
Run Code Online (Sandbox Code Playgroud)
我想写一个查询,给出一个作者的名字,找到他所有书的瓷砖。
正如您所看到的,两个文档都有很多列,我不想获取所有列。因此我的必填字段是
`req_fields = ['name', 'books']`
Run Code Online (Sandbox Code Playgroud)
我查询如下
author = Author.objects.filter(name='xyz').only(*req_fields)
Run Code Online (Sandbox Code Playgroud)
如果我打印author对象,我会得到:
{
_id=ObjectId('50fcf9682c345a0427000019'),
_cls='Author',
name='xyz',
books=[DBRef('Book', ObjectId('50fcd9682c441e0427000019')),
DBRef('Book', ObjectId('50fcd9682c361e0427000020'))]
}
Run Code Online (Sandbox Code Playgroud)
我希望查询返回标题字符串列表而不是书籍对象列表。我该如何修改?以便结果对象如下所示
{
_id=ObjectId('50fcf9682c345a0427000019'),
_cls='Author',
name='xyz',
books=['Title One', 'Title Two']
}
Run Code Online (Sandbox Code Playgroud) 我想从 a 中删除一些引用ListField(ReferenceField),完全基于它们的值。
我将有关图像的信息存储在以下模型中:
class ImageUrl(Document):
src = UrlField()
counter = IntField()
deleted = BooleanField()
Run Code Online (Sandbox Code Playgroud)
我们将id页面上遇到的图像的s存储在一个EmbeddedDocument被调用的s 中Webpage:
class Webpage(EmbeddedDocument):
image_list = ListField(ReferenceField(ImageUrl))
...
Run Code Online (Sandbox Code Playgroud)
最后,将Website模型嵌入到RawData模型中:
class RawData(Document):
...
webpage = EmbeddedDocumentField(Webpage)
Run Code Online (Sandbox Code Playgroud)
我想ImageUrl从RawData记录中删除对记录的引用,基于它们的一些属性(例如:计数器值超过 1),然后将deleted这些ImageUrl记录的属性设置为True.
我正在做:
images = ImageUrl.objects((Q(deleted=False) & Q(counter__gt=1)).all()
for image in images:
# all RadData records containing the image in their image list
for rdata in RawData.objects(webpage__image_list__in=[image.id]:
# …Run Code Online (Sandbox Code Playgroud) 我正在使用 MongoEngine 和 Flask 来开发 REST Api
如何测试DoesNotExist 的异常?
如果我使用
assertRaises(DoesNotExist, Model.objects.get(id=id))
Run Code Online (Sandbox Code Playgroud)
python 解释器引发 NameError 异常。
如何导入此DoesNotExist 异常?
我看到有些人进口
from django.db.models.base import ObjectDoesNotExist
Run Code Online (Sandbox Code Playgroud)
但我正在将 Flask 与 MongoEngine 一起使用,并且需要知道我应该从哪里导入DoesNotExist
我在名为 model.py 的文件中有以下架构
from mongoengine import *
class Subject(Document):
uri = StringField(required=True)
resources = ListField(ReferenceField(ResourceSubject))
class ResourceSubject(Document):
subject = ReferenceField(Subject,reverse_delete_rule=CASCADE)
resource = ReferenceField(Resource)
class Resource(EmbeddedDocument):
uri = StringField()
title = StringField()
snippet = StringField()
image = StringField()
source = StringField()
adapter = StringField()
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我尝试初始化主题subj = Subject(uri="hello").save()时,出现名称错误:NameError: name 'ResourceSubject' is not defined。
我不明白原因,我猜这与框架有关?我尝试将各个文件中的类分开然后导入,但我仍然遇到相同的错误。我错过了什么?
在这一行抛出错误: resources = ListField(ReferenceField(ResourceSubject))
我正在尝试or使用MongoEngine和django.db.models.Q类构造一个简单的查询.
我的代码(从中运行./manage.py shell)是:
from db.models import User
from django.db.models import Q
User.objects.filter(Q(username='foo') | Q(email='bar'))
Run Code Online (Sandbox Code Playgroud)
我models.py只是
from mongoengine import *
class User(Document):
username = StringField()
email = StringField()
Run Code Online (Sandbox Code Playgroud)
我尝试了几个不同的版本,并始终得到以下错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "venv/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 193, in filter
return self.__call__(*q_objs, **query)
File "venv/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 109, in __call__
raise InvalidQueryError(msg)
InvalidQueryError: Not a query object: (OR: ('username', 'foo'), ('email', 'bar')). Did you intend to …Run Code Online (Sandbox Code Playgroud) 就像在带有 sql 后端的 django 中一样,我们可以通过以下方式将查询集转换为平面列表
foovar.objects.all().values_list('id', flat=true)
Run Code Online (Sandbox Code Playgroud)
给出一个 id 列表
如何在 mongo 后端获取 id 列表,正在使用的 ORM 是 mongoengine,其中 values_list 函数没有平面参数。
我在 Python中的模型中boolean命名pending了字段Mongoengine。我希望文档在 1 小时后仅在pending=True. 如果我需要在 1 小时后无条件删除文档,我将设置过期索引。是否有一些聪明而简单的方法来添加一些条件检查来使索引过期?
先感谢您!
我有 2 个要查询的数据库,但我只能从其中一个获得结果。我将 mongoengine 与 python 和石墨烯一起使用(这是我的第一次)。我已经用尽了我的搜索,我不明白如何解决这个问题。这是我的代码:
import graphene
from mongoengine import Document, connect
from mongoengine.context_managers import switch_collection
from mongoengine.fields import (
StringField,
UUIDField,
IntField,
FloatField,
BooleanField,
)
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect
class UserModel(Document):
meta = {"collection": "users"}
userID = UUIDField()
first_name = StringField()
last_name = StringField()
class Users(MongoengineObjectType):
class Meta:
model = UserModel
class UsersQuery(graphene.ObjectType):
users = graphene.List(Users)
user = graphene.Field(Users, userID=graphene.UUID())
def resolve_users(self, info):
db = connect("users")
users = list(UserModel.objects.all())
db.close()
return users
def …Run Code Online (Sandbox Code Playgroud) 我有一个烧瓶应用程序,我使用 mongoengine 创建数据库。但是现在,我需要连接 MongoDB Atlas 的集群,但我只能找到如何使用 Pymongo:
client = pymongo.MongoClient("mongodb+srv://<username>:<password>@<database-name>.mongodb.net/test?retryWrites=true&w=majority")
db = client.test
Run Code Online (Sandbox Code Playgroud)
我只是想要一些帮助来连接这个新数据库。