标签: mongoengine

如何在MongoEngine中通过id从列表(ListField)中删除项目?

结构体:

{title: 'test', comments: [{id:1, title: ''}, {id: 8, title: ''}]}

我需要删除id = 8项,谢谢.

mongodb mongoengine

7
推荐指数
1
解决办法
4223
查看次数

Mongoengine获取最新()

在django中如果我使用MongoEngine,如何获取查询集的最新实例

通常我们这样做

Users.objects.latest('id')
Run Code Online (Sandbox Code Playgroud)

但我不能latest在MongoEngine中使用.

;).我陷入了困境.

我在这里找不到解决方案.但我已经实施了.你对下面的意见怎么样?

Users.objects.all().order_by('-id').limit(1)[0] 
Run Code Online (Sandbox Code Playgroud)

这将返回最新的实例.

并通过将其交给mongoenngine来解决问题.

https://github.com/anishmenon/mongoengine/

您可以安装并使用

 Users.objects.latest('id')
Run Code Online (Sandbox Code Playgroud)

python django mongodb pymongo mongoengine

7
推荐指数
2
解决办法
3391
查看次数

记录MongoEngine生成的原始查询

我需要在我的Django应用程序中记录MongoEngine生成的所有查询.

我无法使用,cursor._query()因为我需要记录所有MongoEngine文档的查询.

日志记录应该在应用程序级别而不是数据库级别完成,因此将MongoDB分析级别设置为2将无济于事.

我找到了这个要点,这似乎有帮助,但我不明白.

是否有更简单的方法来编写中间件或任何其他方式我可以记录所有查询.

python django logging mongodb mongoengine

7
推荐指数
1
解决办法
500
查看次数

在mongoengine中更新嵌入文档列表字段的正确方法是什么?

我正在尝试定义对mongoengine中嵌入文档的列表字段执行检查和更新的方法.做我正在做的事情的正确方法是什么.代码如下.

class Comment(EmbeddedDocument):
    created = DateTimeField()
    text = StringField()

class Post(Document):
    comments = ListField(EmbeddedDocumentField(Comment))

    def check_comment(self, comment):
        for existing_comment in self.comments:
            if comment.created == existing_comment.created and 
                comment.text == existing_comment.text:
                return True
        return False

    def add_or_replace_comment(self, comment):
        for existing_comment in self.comments:
            if comment.created == existing_comment.created:
                # how do I replace?

        # how do I add?
Run Code Online (Sandbox Code Playgroud)

这甚至是正确的方式去做这样的事情?

python mongoengine

6
推荐指数
1
解决办法
3799
查看次数

Mongoengine - 如何执行"保存新项目或增加计数器"操作?

我在一个网络抓取项目中使用MongoEngine.我想跟踪我在所有抓取的网页上遇到的所有图像.

为此,我存储图像srcURL和图像遇到的次数.

MongoEngine模型定义如下:

class ImagesUrl(Document):
    """ Model representing images encountered during web-scraping.

    When an image is encountered on a web-page during scraping,
    we store its url and the number of times it has been
    seen (default counter value is 1).
    If the image had been seen before, we do not insert a new document
    in collection, but merely increment the corresponding counter value.

    """

    # The url of the image. There cannot be any duplicate.
    src = URLField(required=True, …
Run Code Online (Sandbox Code Playgroud)

python mongodb mongoengine

6
推荐指数
1
解决办法
1589
查看次数

嵌入式文档与MongoEngine有关

我使用带有Flask-MongoEngine的MongoDB作为我的网络应用程序的ORM组件.

我已经构建了User文档架构,如下所示:

from ..core import db

class UserComics(db.EmbeddedDocument):
    favorites = db.SortedListField(db.StringField(), default=None)

class UserSettings(db.EmbeddedDocument):
    display_favs = db.BooleanField(default=False)
    default_cal = db.StringField(default=None)
    show_publishers = db.ListField(db.StringField(), default=None)

class UserTokens(db.EmbeddedDocument):
    refresh_token = db.StringField(default=None)
    access_token = db.StringField(default=None)
    expire_time = db.StringField(default=None)

class User(db.Document, UserMixin):
    # Save User document to this collection
    meta = {'collection': 'users_test'}

    userid = db.StringField()
    full_name = db.StringField()
    first_name = db.StringField()
    last_name = db.StringField()
    gender = db.StringField()
    birthday = db.StringField()
    email = db.EmailField()
    friends = db.ListField(db.StringField())
    date_creation = db.DateTimeField()
    last_login = db.DateTimeField()
    favorites …
Run Code Online (Sandbox Code Playgroud)

python mongodb mongoengine flask flask-mongoengine

6
推荐指数
1
解决办法
7256
查看次数

MongoDB:从数组字段中的所有子文档中删除字段

我有以下格式的数千份文件:

{
"_id" : ObjectId("51e98d196b01c2085c72d731"),
"messages" : [
    {
        "_id" : ObjectId("520167056b01c20bb9eee987"),
        "id" : ObjectId("520167056b01c20bb9eee987"),

    },
    {
        "_id" : ObjectId("520167056b01c20bb9eee988"),
        "id" : ObjectId("520167056b01c20bb9eee988"),

    },
    {
        "_id" : ObjectId("520167056b01c20bb9eee989"),
        "id" : ObjectId("520167056b01c20bb9eee989"),
    }
],
}
Run Code Online (Sandbox Code Playgroud)

我需要删除重复的"id"字段.这是我尝试过的:

db.forum_threads.update({}, {$unset: {"messages.$.id": 1}}, {multi: true});
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Cannot apply the positional operator without a corresponding query field containing an array.
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo mongoengine

6
推荐指数
2
解决办法
7908
查看次数

Mongoengine:ConnectionError:您尚未定义默认连接

在我的新Django项目中,我设置了一个MongoDb数据库并使用mongoengine模块,但是我无法在视图中的shell中正确访问dabase nore."ConnectionError:您尚未定义默认连接"

我的settings.py包括以下内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DaTaBaSe',                      
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost', 
        'PORT': '3306',                  
    },
    'tracking': {
        'ENGINE': 'django.db.backends.dummy',
        'NAME': 'analytics',
    }
}



import mongoengine
SESSION_ENGINE = 'mongoengine.django.sessions'
mongoengine.connect(_MONGODB_NAME, 'localhost:27017')
AUTHENTICATION_BACKENDS = (
       'mongoengine.django.auth.MongoEngineBackend',
        )
Run Code Online (Sandbox Code Playgroud)

在models.py中导入mongoengine

from mongoengine import *
from myproject.settings import _MONGODB_NAME
mongoengine.connect(_MONGODB_NAME, 'localhost:27017')
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助

python django mongodb mongoengine

6
推荐指数
3
解决办法
1万
查看次数

mongoengine.DynamicEmbeddedDocument与mongoengine.DictField有什么区别?

一个mongoengine.DynamicEmbeddedDocument可以用来利用MongoDB的灵活架构设计少.它是可扩展的,不会对字段应用类型约束,afaik.

一个mongoengine.DictField同样允许使用MongoDB的无模式性质.在文档中他们只是说(wrt DictField)

这类似于嵌入式文档,但结构未定义.

这是否意味着,届时,mongoengine.fields.DictFieldmongoengine.DynamicEmbeddedDocument是完全可以互换?

编辑(更多信息):

mongoengine.DynamicEmbeddedDocumentmongoengine.EmbeddedDocument代码继承而来的是:

A mongoengine.Document不存储在自己的集合中.mongoengine.EmbeddedDocuments应该mongoengine.Documents通过mongoengine.EmbeddedDocumentField字段类型用作字段.

A mongoengine.fields.EmbeddedDocumentField

嵌入的文档字段 - 具有声明的document_type.只有有效值是子类EmbeddedDocument.

这是否意味着唯一使得DictField并且DynamicEmbeddedDocument不完全可互换的是DynamicEmbeddedDocument必须通过EmbeddedDocumentField字段类型定义?

python mongoengine

6
推荐指数
1
解决办法
1546
查看次数

在Flask-Mongoengine中切换集合并保存

我无法将文档保存到新集合,然后从旧集合中删除它们.我像这样创建一个新对象:

class Test(mongo.Document):
     field = mongo.StringField()

t = Test(field="test")
t.switch_collection('default')
t.save()
t.switch_collection('switched')
t.save()
t.switch_collection('default')
t.delete()
Run Code Online (Sandbox Code Playgroud)

似乎只执行第一次保存到默认集合,然后执行任何操作.我玩了很多差异选项,比如每次切换/保存后重新加载对象以及mongoengine上下文管理器:

with switch_collection(Test, 'mongoswitch') as test:
    test(field="switch").save()
Run Code Online (Sandbox Code Playgroud)

我的mongo设置看起来像(先叫):

 app.config["MONGODB_SETTINGS"] = {'db': 'TestDB'}
 mongo = MongoEngine(app)
Run Code Online (Sandbox Code Playgroud)

使用mongoengine 0.10和pymongo 2.8.1和Python 3.4.

有人有想法吗?非常感谢.

python mongoengine flask flask-mongoengine

6
推荐指数
1
解决办法
805
查看次数