更新 mongoengine 中的嵌入文档列表

2023-12-28

我正在努力解决 mongoengine 语法。

我有以下型号...

class Post(EmbeddedDocument):
    uid = StringField(required=True)
    text = StringField(required=True)
    when = DateTimeField(required=True)


class Feed(Document):
    label = StringField(required=True)
    feed_url = StringField(required=True)
    posts = ListField(EmbeddedDocumentField(Post))

    def my_method(self, post):
        pass

...并且将 post 对象传递到 my_method 中,如果现有帖子存在于 self.posts 中并具有匹配的 uid,我想更新它,或者如果不存在,则推送到 self.posts 。

是否有语法可以在 mongoengine 的一次调用中执行此操作?


否,对于列表字段,您无法在单个查询中将更新插入到列表中。$addToSet不会工作,因为你已经改变了post所以你无法匹配。您可以围绕此进行编码,但它确实会产生竞争条件,其中出现错误的机会很小,例如:

    class Post(EmbeddedDocument):
        uid = StringField(required=True)
        text = StringField(required=True)

    class Feed(Document):
        label = StringField(required=True)
        feed_url = StringField(required=True)
        posts = ListField(EmbeddedDocumentField(Post))

    Feed.drop_collection()

    Feed(
        label="label",
        feed_url="www.feed.com"
    ).save()

    post = Post(uid='1', text="hi")
    updated = Feed.objects(posts__uid=post.uid).update_one(set__posts__S=post)
    if not updated:
        Feed.objects.update_one(push__posts=post)

首先,我们尝试更新,如果它不存在,我们将推送到列表 - 这是另一个进程运行并可能推送该列表的机会窗口。post在名单上。

风险可能是可以接受的,但实际上,我认为改变你的模式更好,可能会分裂Post进入自己的收藏。然后您可以使用更新语句并设置整个对象。成本将是获取提要数据的额外查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 mongoengine 中的嵌入文档列表 的相关文章

  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • 如何使用 django (python) 和 s3 上传文件?

    我正在寻找一种将文件上传到 s3 的方法 我正在使用 django 我目前正在使用亚马逊的 python 库进行上传以及以下代码 View def submitpicture request fuser request session lo
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • 如何从 Lua 调用 Python 函数?

    我想从我的 lua 文件运行 python 脚本 我怎样才能实现这个目标 Example Python代码 sum py file def sum from python a b return a b Lua code main lua f
  • Windows Defender 检测 Python EXE 为木马

    我制作了一个 Python 脚本 将 Windows 目录以 zip 形式邮寄给我 我使用 sched 模块添加了一个调度程序 每小时重复一次 我试图制作一个简单的同步应用程序供个人使用 在 Windows 启动时启动 我使用将其转换为 e
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有
  • 使用 boto3 从 s3 下载时使用 filename 作为文件名

    我正在使用 boto3 上传文件 如下所示 client boto3 client s3 aws access key id id aws secret access key key client upload file tmp test
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • 如何使用 xlrd 将新列和行添加到 .xls 文件

    如何向 xlrd 中的工作表添加新列和 或行 我有一个使用 open workbook 读取的 xls 文件 我需要在第一张表中添加一个新列 bouncebacks 然后在该表中添加新行 但我在 xlrd 文档中找不到任何显示如何添加新行和
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • 使用 Python 脚本打开特定文件类型?

    如何使 Python 脚本成为特定文件类型 例如 foo 的默认应用程序 例如 当我双击 Finder Explorer 中的文件时 我希望该文件在 Python 脚本中打开 这可以在 Win 和 或 OS X 中实现吗 如果重要的话 该应
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Qcut Pandas:ValueError:Bin 边缘必须是唯一的

    我使用 Pandas 中的 Qcut 将数据离散化为大小相等的存储桶 我想要有价格桶 这是我的数据框 productId sell prix categ popularity 11997 16758760 0 28 75 50 524137
  • Scrapy 抓取并跟踪 href 中的链接

    我对 scrapy 很陌生 我需要从 url 的主页跟踪 href 到多个深度 再次在 href 链接内我有多个 href 我需要遵循这些href 直到到达我想要抓取的页面 我的页面的示例 html 是 初始页 div class page
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a
  • 在Python中从CSV文件中获取随机行并找到相应的单词,就像测验一样

    抱歉标题含糊不清 想不出更好的表达方式 我有一个包含德语 英语单词的 CSV 文件 如下所示 Ja Yes Nein No Katze Cat 我希望我的 python 脚本从 CSV 文件中打印一个随机的德语单词 并要求他们输入英语单词

随机推荐

  • 使用 HTML5 语义标记搜索结果列表

    如果您只需要一些有用的东西 那么制作搜索结果列表 例如在 Google 中 并不难 然而现在 我想利用 HTML5 语义的优势来完美地做到这一点 目标是定义标记搜索结果列表的事实上的方式 该列表可能被任何未来的搜索引擎使用 对于每一次点击
  • Azure 权限中的“变体”是什么

    在关于这个的例子中https learn microsoft com en us powershell microsoftgraph find mg graph command view graph powershell 1 0 https
  • java到底有没有指针? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 限制 HTML5 文本区域中的行数

    我正在寻找问题的解决方案 但找不到 它可以是 AngularJS 或 Javascript 然后我将其翻译成 AngularJS 问题是我必须限制简单文本区域的行数 HTML5 的属性 rows x 仅限制视图 我必须限制线路 问题是 即使
  • urllib2 基本身份验证的奇怪之处

    我正用这个把头撞在墙上 我一直在尝试每个示例 阅读我可以在网上找到的有关 urllib2 基本 http 授权的所有最后一点 但我无法弄清楚是什么导致了我的特定错误 更令人沮丧的是 该代码适用于一个页面 但不适用于另一页面 登录 www m
  • Python 2.7 尝试并排除 ValueError

    我使用 int raw input 查询预计为 int 的用户输入 然而 当用户没有输入整数 即只是按回车键时 我会得到一个 ValueError def inputValue inputMatrix rangeRows rangeCols
  • 尝试在 woocommerce Analytics -> 订单报告表中添加订单项目名称列(并输出到 csv 文件)

    我正在尝试向 WooCommerce Analytics gt 订单提供的表中添加一列 并且该订单的商品名称 不是产品名称 显示在其上 我添加了一个钩子并尝试提取订单中商品的所有名称 这个钩子是我之前使用过的 它在 WooCommerce
  • 结构与类中使用的泛型

    假设我们有以下内容struct使用泛型的定义 public struct Foo
  • SlingModels:从资源改编时可以注入 SlingHttpServletRequest 吗?

    我是 SlingModels 的新手 注释还不是很清楚 我目前正在尝试将一些基本基础组件从 AEM 6 2 转换为使用 SlingModels 对于图像组件 基础 JSP 使用 SlingHttpServletRequest 来设置 Ima
  • 装饰器 @page、@component 和 @app 在 ionic 2 应用程序中意味着什么?

    我见过 app and page and 成分似乎可以互换使用 我不知道有什么区别 ionic2 文档在这方面非常糟糕 那么 ionic 2 应用程序的这些装饰器之间的根本区别是什么 什么时候你会使用其中一个而不是另一个 Page 和 Ap
  • jQuery:只有直接后代选择器

    我有以下结构 ul li a link a ul li a link a ul li a link a li li a link a li li a link a li ul li li a link a ul ul li ul li ul
  • 带参数的单例

    我需要用一些参数实例化一个单例类 我现在的做法是 class SingletonExample private SingletonExample mInstance other members private SingletonExampl
  • Sequel Pro 在 Docker 中使用 Mysql

    我用 docker compose 构建了 2 个 docker 容器 我在 Mac 上使用 Docker 没有 boot2docker version 2 services drupal web image drupal latest p
  • Outlook Web 应用程序的任务窗格插件

    通过命令加载项 任务窗格将出现在 Outlook 桌面应用程序的右侧 同样 是否可以让任务窗格显示在 Outlook Web 应用程序的右侧 提前致谢 跟进这个 插件命令 https blogs msdn microsoft com exc
  • 将数组颠倒过来?

    我不是在谈论array flip 我想反转一个没有数字 字母基础的数组 只是倒挂 Example array music television hollywood Will be array hollywood television mus
  • 为 Azure 警报配置电子邮件模板

    有没有办法 我可以为 Azure 警报配置电子邮件模板 我已为指标创建了电子邮件警报 并且需要在指标值超过阈值时发送自定义电子邮件 无法自定义 Azure 警报的电子邮件模板 作为解决方法 你可以在 Azure 警报上配置 Webhook
  • Android如何以编程方式获取使用whats app应用程序的联系人列表

    我在此应用程序中使用小型 Android 应用程序 我尝试获取使用 Whats App 应用程序的联系人 并在联系人更新他 她的个人资料图片和状态时 从我的应用程序中提醒我选择的 Whats App 联系人 您可以查询内容光标以查看联系人具
  • 如何使用相同的模型对象初始化 JavaFX 控制器?

    Scenario 我正在创建一个 GUI 其中多个视图引用同一模型对象 我习惯什么 在 Swing 中 如果我希望所有视图都引用同一模型 我会将模型传递到构造函数中 我目前在做什么 在 JavaFX 中 在加载每个视图 控制器后 我通过在视
  • iOS 模拟器:如何在 Mac 笔记本电脑上进行 2 指单击?

    在iOS模拟器中 如何在mac笔记本电脑上模拟2指单击 按住 Option alt 键的同时单击
  • 更新 mongoengine 中的嵌入文档列表

    我正在努力解决 mongoengine 语法 我有以下型号 class Post EmbeddedDocument uid StringField required True text StringField required True w