Mongo嵌入文档查询

2023-12-31

我有 2 个动态文档:

class Tasks(db.DynamicDocument):
    task_id = db.UUIDField(primary_key=True,default=uuid.uuid4)
    name = db.StringField()
    flag = db.IntField()

class UserTasks(db.DynamicDocument):
    user_id = db.ReferenceField('User')
    tasks = db.ListField(db.ReferenceField('Tasks'),default=list)

我想过滤UserTasks通过检查文件是否flag给定task_id的值(来自任务文档)是0 or 1,给定task_id和user_id。所以我通过以下方式查询:-

obj = UserTasks.objects.get(user_id=user_id,tasks=task_id)

这让我UserTask object.

现在,我循环任务列表,首先获得等效的任务,然后按以下方式检查其标志值。

task_list = obj.tasks
for t in task_list:
    if t['task_id'] == task_id:
        print t['flag']

有没有更好/直接的查询方式UserTasksDocument 以获取任务文档的标志值。

PS:我可以直接从Tasks文档,但我还需要检查任务是否与用户关联。于是我就直接查询了USerTasks文档。


我们可以直接过滤文档吗ReferenceField's http://docs.mongoengine.org/en/latest/apireference.html#mongoengine.fields.ReferenceField单个查询中的字段?

No,不可能直接使用以下字段过滤文档ReferenceField因为这样做需要联接,而 mongodb 不支持联接。

根据 MongoDB 文档数据库参考: http://docs.mongodb.org/manual/reference/database-references/

MongoDB 不支持联接。在 MongoDB 中,一些数据是非规范化的, 或者与文档中的相关数据一起存储,以消除连接的需要。

来自另一个page http://docs.mongodb.org/ecosystem/tutorial/model-data-for-ruby-on-rails/在官方网站上:

如果我们使用关系数据库,我们可以执行连接 用户和商店,并在单个查询中获取所有对象。但 MongoDB 不支持连接,因此有时需要一些 非规范化。

关系纯粹主义者可能已经感到不安了,就好像我们是 违反某些普遍法则。但我们要记住,MongoDB 集合不等同于关系表;每个服务一个 独特的设计目标。规范化表提供了原子、 孤立的数据块。然而,一份文件更能代表 一个物体作为一个整体。

所以在 1 个查询中,我们不能同时过滤tasks具有特定的标志值和给定的user_id and task_id on the UserTasks model.

那么如何进行过滤呢?

要根据所需条件执行过滤,我们需要执行 2 个查询。

在第一个查询中,我们将尝试过滤Tasks模型与给定的task_id and flag。然后,在第二个查询中,我们将过滤UserTasks模型与给定的user_idtask从第一个查询中检索。

Example:

假设我们有一个user_id, task_id我们需要检查相关任务是否有flag价值为0.

第一个查询

我们首先会检索my_task与给定的task_id and flag as 0.

my_task = Tasks.objects.get(task_id=task_id, flag=0) # 1st query

第二次查询

然后在第二个查询中,您需要过滤UserTask模型与给定的user_id and my_task object.

my_user_task = UserTasks.objects.get(user_id=user_id, tasks=my_task) # 2nd query

仅当您得到一个时才应该执行第二个查询my_task具有给定对象task_id and flag价值。此外,您还需要添加错误处理,以防没有匹配的对象。

如果我们使用过怎么办EmbeddedDocument为了Tasks model?

假设我们已经定义了我们的Tasks文档作为EmbeddedDocumenttasks领域在UserTasks模型作为EmbeddedDocumentField,然后为了进行所需的过滤,我们可以执行如下操作:

my_user_task = UserTasks.objects.get(user_id=user_id, tasks__task_id=task_id, tasks__flag=0)

获取特定的my_task从任务列表中

上面的查询将返回一个UserTask文件将包含所有tasks。然后我们需要执行某种迭代以获得所需的任务。

为此,我们可以使用以下命令执行列表理解enumerate()。 那么所需的索引将是返回的 1 元素列表的第一个元素。

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

Mongo嵌入文档查询 的相关文章

  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 芹菜:“明显偏离”

    我的分布式系统上的芹菜有很大的问题 我有几台不同本地化的机器 并且我的日志文件中有很多警告 例如 与 celery host 发生重大偏差 我能够设置日期以返回相同的值 即使机器位于不同的国家 地区 但 python print utcof
  • 我不想在生成记录时显示 mysql 中的某些表和某些列

    由于我已经让管理员动态创建表单 当他创建表单时 我所做的是动态创建表单的表 一切都工作正常 现在我想显示用于生成报告的表格和列 我不想表现出来 用户登录 地点 地点 用于生成报告的表格和三列 user id 用户常用号 年份 这三列对于我动
  • 你的清单中的 android:description 标签出现在哪里?

    android label 参数显示在主屏幕上的图标下方 但我看不到 android description 标签显示在手机上的位置 主屏幕 应用程序设置菜单 我在Android官方文档中没有找到答案 任何想法 虽然我在 Android 操
  • HTML 复选框表单和 HTTP URL

    所以 我有这个 HTML 表单
  • 变量名中的 Perl 变量替换

    usr bin perl my var a sub a a var a a print var sub a n sub b b var b b print var sub b n DATA b 为什么打印b 而不打印a 这对我来说似乎是非常
  • 从 v8::Arguments 转换为 C++ 类型

    我正在尝试用 C 创建 Node js 模块 但我对 v8 Arguments 类感到困惑 假设我有一个用于发送电子邮件的 Javascript 类 它有一个具有以下签名的方法 Mailer sendEmail Array recipien
  • 如何从多项式拟合中提取方程?

    我的目标是将一些数据拟合到多项式函数并获得包括拟合参数值的实际方程 我适应了这个例子 http scikit learn org stable auto examples linear model plot polynomial inter
  • Apple 开发人员 - 无效的 CSR、无效证书

    我生成 certSigningRequest通过钥匙串访问文件 Keychain Access gt Certificate Assistant gt Request a Certificate From a Certificate Aut
  • AS3 中强制垃圾收集?

    是否可以以编程方式强制在 ActionScript 3 0 中运行完整的垃圾回收 假设我已经使用 eventListener 创建了一堆 Display 对象 并且一些 DO 已被删除 一些 eventListener 已被触发并删除等 是
  • 根据另一个值过滤元素

    我想输出 ReactJs 中每个帖子的所有问题的数量 为此 我创建了下一个代码 const posts title 1 id 123 title 2 id 1234 title 3 id 12345 const questions id 5
  • Excel (2007) VBA - .Formula 包含引号

    我昨天尝试将以下代码放入程序中 VBA 调用了一个错误 我认为这是因为公式内的双引号 我用谷歌搜索 发现的所有结果都只是给出了输入公式的基本知识 但没有一个解释如何绕过里面的引号 之前有一个With语句 Pivot是工作表名称 Range
  • 在 awk 中使用 if 块

    我正在 awk 中处理一个文件 我想要传递文件中第 25 到 34 列位置有空格的行 并且想要处理第 10 到 19 列位置有空格的行 具体来说 我想用 0 替换列位置 10 到 19 中的空格 这样 输出文件的 25 34 行中的空白行将
  • 构建docker实例时如何安装本地rpm文件?

    我有以下 docker 文件 我想在构建 docker 实例时专门安装磁盘上可用的 rpm 文件 我对 rpm install 的调用如下所示 命令RUN rpm i chrpath 0 13 14 el7 x86 64 rpm fails
  • Logback 不使用配置文件

    我正在尝试将进程的日志保存到文件中 当我在 netbeans 中运行该类时 这工作正常 但在导出 JAR 文件后 该进程无法选择 logback xml jar 文件与 logback xml 位于同一路径中 我尝试使用我在这里找到的所有示
  • 文本视图返回错误的文本大小

    我需要获取文本视图的文本大小 以便在用户按下按钮时增加文本大小 这表明它有助于增加文本视图中的文本大小 让我清楚到目前为止我做了什么 我有一个文本视图并通过 dimen 文件夹设置其文本大小
  • 解析失败:Lcom/google/android/aidl/BaseStub;

    我更新了 implementation com android installreferrer installreferrer X from 1 1 2 to 2 0 然后开始收到此错误 Process com tomatedigital
  • 在struts 2中为字符串列表制作一个垂直的单选按钮列表?

    我正在使用一个 struts radio 标签 该标签填充了一个字符串列表 我正在使用的视图是 tr td td tr
  • 实体数据查询和内存泄漏

    我正在循环下载大量数据 但经过一些操作后 我删除了它们 但我看到内存分配增长得非常快 几秒钟就达到了 1GB 那么如何在每次迭代后进行清理呢 using var contex new DB var inputs contex AIMRInp
  • 客户端 Web 应用程序中的 GPG (PGP) 解密

    如何在 Web 应用程序的客户端解密某些加密数据 E g 数据以加密方式存储在服务器上 它使用公共 GPG 密钥进行加密 服务器将加密后的数据发送给客户端 客户端需要使用本地私钥对其进行解密 假设我能够将私钥传递给浏览器并使用 JavaSc
  • Mongo嵌入文档查询

    我有 2 个动态文档 class Tasks db DynamicDocument task id db UUIDField primary key True default uuid uuid4 name db StringField f