标签: mongoengine

mongoengine - 嵌入文档内的键上的索引?

MongoDB 允许在嵌入文档内的键上建立索引:

db.things.ensureIndex({"address.city": 1})
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 mongoengine 做到这一点?

python mongodb mongoengine

4
推荐指数
1
解决办法
2501
查看次数

Mongoengine 查询在参考字段列表中使用 only()

我有两个文件

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)

python mongodb mongoengine

4
推荐指数
1
解决办法
8581
查看次数

MongoEngine - 通过 id 从 ListField 中提取引用

我想从 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)

我想ImageUrlRawData记录中删除对记录的引用,基于它们的一些属性(例如:计数器值超过 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)

python mongodb mongoengine

4
推荐指数
1
解决办法
4052
查看次数

如何测试MongoEngine的DoesNotExist异常

我正在使用 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

python mongodb mongoengine flask

4
推荐指数
1
解决办法
2736
查看次数

MongoEngine 架构 - 名称错误

我在名为 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))

python mongodb mongoengine

4
推荐指数
1
解决办法
565
查看次数

使用MongoEngine和Q构造查询会抛出InvalidQueryError

我正在尝试or使用MongoEnginedjango.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)

python django mongoengine

4
推荐指数
1
解决办法
2257
查看次数

Mongoengine 查询设置为列表转换

就像在带有 sql 后端的 django 中一样,我们可以通过以下方式将查询集转换为平面列表

foovar.objects.all().values_list('id', flat=true)
Run Code Online (Sandbox Code Playgroud)

给出一个 id 列表

如何在 mongo 后端获取 id 列表,正在使用的 ORM 是 mongoengine,其中 values_list 函数没有平面参数。

python django mongoengine flask-mongoengine

4
推荐指数
1
解决办法
4986
查看次数

根据条件使mongoDB中的索引过期

我在 Python中的模型中boolean命名pending了字段Mongoengine。我希望文档在 1 小时后仅在pending=True. 如果我需要在 1 小时后无条件删除文档,我将设置过期索引。是否有一些聪明而简单的方法来添加一些条件检查来使索引过期?

先感谢您!

python ttl mongodb mongoengine

4
推荐指数
2
解决办法
1791
查看次数

mongoengine 连接和多个数据库

我有 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)

mongodb mongoengine graphene-python

4
推荐指数
1
解决办法
3059
查看次数

使用 mongoengine 连接到 MongoDB atlas 集群

我有一个烧瓶应用程序,我使用 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)

我只是想要一些帮助来连接这个新数据库。

mongodb pymongo mongoengine flask mongodb-atlas

4
推荐指数
1
解决办法
3937
查看次数