我有一个名为 的类Request,我想在 mongoengine 中获取它的第一个对象我想我可以使用这个:
首先获取像
这样的所有对象
,然后调用对象的属性
visitors = Request.objects.all()
ss = visitors[0].ip
我正在使用 mongoengine 为 MongoDB 开发一种初始化例程。
我们向用户提供的文档是从多个 JSON 文件中读取的,并在应用程序启动时使用上述 init 例程写入数据库。
其中一些文档具有唯一键,mongoengine.errors.NotUniqueError如果将具有重复键的文档传递到数据库,则会引发错误。这根本不是问题,因为我能够使用try-except.
然而,其他一些文档就像一堆值或参数。因此,没有可以检查的唯一键以防止它们被插入数据库两次。我想我可以从所需的集合中读取所有现有文档,如下所示:
docs = MyCollection.objects()
Run Code Online (Sandbox Code Playgroud)
docs并使用以下命令检查要插入的文档是否已可用:
doc = MyCollection(parameter='foo')
print(doc in docs)
Run Code Online (Sandbox Code Playgroud)
即使数据库中已经false有文档也会打印。MyCollection(parameter='foo')
如何在不使用唯一键的情况下实现重复检测?
如果我有一个类似的文档:
class Page(Document):
title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
我想将其更新为:
class Page(Document):
page_title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
在 mongoengine 中处理数据库迁移的最佳方法是什么?我想你可以迭代数据库并拉出具有该字段的对象并将它们添加回新字段,然后删除具有该字段的所有对象,但如果有一种惯用的方法来处理这个问题那就太好了那类的东西。
我正在使用python-telegram-bot库开发一个简单的 Telegram 聊天机器人。我的机器人目前正在使用ConversationHandler来跟踪对话状态。
我想通过将对话状态存储在 MongoDB 数据库中来使对话持久化。
我正在使用mongoenginepython 库与我的数据库进行通信。
通过阅读BasePersistence( https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.basepersistence.html )的文档,我了解到有必要使用自定义类扩展此类,我们称之为MongoPersistence,并覆盖以下方法:
get_conversations(name)update_conversation(name, key, new_state)文档没有指定dict返回的结构get_conversations(name),因此也很难理解如何实现update_conversation(name, key, new_state)
假设我有上面提到的类(store_user_data, store_chat_data,store_bot_data都设置为False因为我不想存储这些数据):
from telegram.ext import BasePersistence
class MongoPersistence(BasePersistence):
def __init__(self):
super(MongoPersistence, self).__init__(store_user_data=False,
store_chat_data=False,
store_bot_data=False)
def get_conversations(self, name):
pass
def update_conversation(self, name, key, new_state):
pass
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个类,以便从数据库中获取和保存我的对话状态?
我有一个使用MongoEngine的文档和嵌入式文档
class Sub(EmbeddedDocument):
Id = StringField()
User = StringField()
Value = StringField()
class Main(Document):
Value = StringField
Values = ListField(EmbeddedDocumentField(Sub))
Run Code Online (Sandbox Code Playgroud)
当我将新的嵌入文档添加到Main的'Values'字段中时,我会在列表中生成一个唯一的id而不是集合.在Main的'values'中可以有多个Sub来自不同的User,我试图让MongoEngine原子地删除列表中的"Sub"值,基于ID和用户.
我试图为Main运行一个select,然后为Sub本身运行update_one
Main.objects(id=main_id).update_one(pull__values__id=sub_id)
Run Code Online (Sandbox Code Playgroud)
但所有这些似乎返回的是数组内部的索引.我知道我可以简单地拉Main,并通过值找到元素并删除它,但我试图保持这种原子,并且在拉,迭代,更新过程中更少有机会添加到sub.
我有一个嵌入式文档类Post和一个父类Thread.
class Thread(Document):
...
posts = ListField(EmbeddedDocumentField("Post"))
class Post(EmbeddedDocument):
attribute = StringField()
...
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的职位,并把它添加到我ListField的Thread班.
我的代码看起来像这样:
post = Post()
post.attribute = "noodle"
post.save()
thread.posts.append(post)
thread.save()
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
"'发布'对象没有属性'保存'"
如果我跳过post.save()一个空Post对象附加到我的Thread.
有任何想法吗?
我遇到了一个经典的陷阱,但找不到我应该做的mongoengine的好例子.
使用标准的博客示例我有类似的东西:
class Comment(EmbeddedDocument):
author = StringField()
approved = BooleanField(default=False)
class Post(Document):
id = StringField(required=True, unique=True)
comments = ListField(EmbeddedDocumentField(Comment))
Run Code Online (Sandbox Code Playgroud)
对于给定的博客帖子(带有id some_id),我只想加载已批准的评论列表.如果帖子的任何评论被批准,我会不小心加载所有评论,因为我匹配列表中的元素.
我正在使用Flask构建一个网站,我将MongoDB与MongoEngine ORM一起使用.为了重新开始,我现在升级了我的ubuntu 14.04开发机器上的所有apt和pip包.不幸的是,这破坏了我与MongoDB的联系:
Traceback (most recent call last):
File "./run.py", line 4, in <module>
from app import app, socketio
File "/home/kr65/beta/app/__init__.py", line 21, in <module>
mongoDb = MongoEngine(app)
File "/usr/local/lib/python2.7/dist-packages/flask_mongoengine/__init__.py", line 33, in __init__
self.init_app(app)
File "/usr/local/lib/python2.7/dist-packages/flask_mongoengine/__init__.py", line 66, in init_app
self.connection = mongoengine.connect(**conn_settings)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py", line 164, in connect
return get_connection(alias)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py", line 126, in get_connection
raise ConnectionError("Cannot connect to database %s :\n%s" % (alias, e))
mongoengine.connection.ConnectionError: Cannot connect to database default :
False is not a …Run Code Online (Sandbox Code Playgroud) 我正在尝试查询集合;获取结果对象,然后我想克隆一个文档并将其保存到同一集合中。
scenario = ModelScenarios.objects(pk=scenario_id).clone()
obj = scenario.update(ScenarioName=data['ScenarioName'])
Run Code Online (Sandbox Code Playgroud)
这只是更新现有文档,但不克隆并应用新数据?这该怎么做?
我已经设置django了mongoengine与django 一起使用mongodb的项目.我已经创建了2个模型并且它们工作正常,但是当我为一个模型使用信号监听器时它还会监听另一个模型,那么如何将信号绑定到它们的模型?
这是我的模型用户代码:
from mongoengine import *
from mongoengine import signals
from datetime import datetime
class User(Document):
uid = StringField(max_length=60, required=True)
platform = StringField(max_length=20, required=True)
index = StringField(max_length=80)
last_updated = DateTimeField(required=True, default=datetime.now())
meta = {
'collection': 'social_users'
}
def before_save(sender, document, **kwargs):
if document.platform and document.uid:
document.index = document.platform+'/'+document.uid
signals.pre_save.connect(before_save)
Run Code Online (Sandbox Code Playgroud)
这是另一个模型 Error
from mongoengine import *
from datetime import datetime
class Error(Document):
call = DictField(required=True)
response = DictField(required=True)
date = DateTimeField(default=datetime.now(), required=True)
meta = {
'collection': …Run Code Online (Sandbox Code Playgroud) mongoengine ×10
mongodb ×8
python ×7
flask ×2
database ×1
django ×1
duplicates ×1
pymongo ×1
telegram ×1