在 Mongo/RectiveMongo 中存储/获取列表引用的值的最佳方式?

2023-12-04

我有一个非常常见的用例 - 评论列表。每个评论都有一个作者。

我使用引用存储评论中对作者的引用,因为作者可以发表多个评论。

现在我正在使用 ReactiveMongo 并希望尝试保持数据库访问异步,但在这种情况下,我不知道如何做。我对数据库进行异步访问以获取评论,但是对于每个评论,我都必须获取作者,到目前为止我知道的唯一方法是循环浏览评论并同步获取用户:

val userOption:Option[JsObject] = Await.result(usersCollection.find(Json.obj("id" -> userId).one[JsObject], timeout)
//...

除此之外,我可以:

  • 异步获取每个用户,但随后我必须引入一些功能来等待所有用户都被获取,以便返回响应,并且我的代码可能会变得一团糟。

  • 存储完整的用户对象 - 至少是我在每个评论中评论所需的对象(图片、名称等)。这种冗余可能会变得管理起来很麻烦,因为每次用户更改某些内容(与评论中存储的数据相关)时,我都必须遍历数据库中的所有评论并进行修改。

此处应用的正确模式是什么?


我不久前解决了这个问题。

mongo 中没有连接。 您必须手动处理连接。

您的选择是:

  1. 循环遍历每个评论条目并为用户查询 mongo。这就是你正在做的事情。
  2. 从评论中获取所有用户 id,在 mongo 中查询匹配这些 id 的用户,然后注意将用户与评论相匹配。这正是您所做的,但进行了一些优化。
  3. 将用户嵌入评论中或将评论嵌入用户中。不推荐这个,这可能不是评论/用户的正确位置。
  4. 考虑在显示评论时需要用户提供哪组数据,然后将此信息嵌入到评论中

我最终选择了最后一个选择。
我们在每条评论中嵌入了用户 ID、名字和姓氏。 此信息不太可能更改(甚至可能在创建后不允许更改?)。
如果它可以改变,那么定制 update-user 方法来用新信息更新相关评论并不太难(我们也这样做了)。
所以现在不需要加入。

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

在 Mongo/RectiveMongo 中存储/获取列表引用的值的最佳方式? 的相关文章

  • 如何查看MongoDB当前配置

    我找到了不同的文档配置选项 http docs mongodb org manual administration configuration 但是如何检查实时系统上正在使用哪些选项 有没有办法查看设置了哪些选项 或者至少正在使用哪个配置文
  • Meteor 独特客户端集合的发布/订阅策略

    使用 Meteor 我想知道如何最好地处理共享相同服务器端数据库集合的不同客户端集合 考虑以下示例 我有一个User集合 在我的客户端我有一个好友用户列表我有一个搜索功能 可以对整个用户数据库执行查询 返回一个与查询匹配的用户名列表 在发布
  • Mongodb 聚合使用 $group 两次

    我在 mongo 中有一堆文档 其结构如下 id number 2 colour id name Green hex 00ff00 position id name Defence type position ageGroup id nam
  • 如何使用 mongo-cxx-driver 设置 Visual Studio 项目设置?

    我已经在 Windows 10 上成功构建了用于 C 的 MongoDB 驱动程序版本 3 0 3 CMAKE INSTALL PREFIX C mongo cxx driver 但我不知道如何在 Visual Studio 2015 中设
  • 如何访问 Pandas DataFrame 中嵌入的 json 对象?

    TL DR 如果 Pandas DataFrame 中加载的字段本身包含 JSON 文档 那么如何以类似 Pandas 的方式使用它们 目前我直接从 Twitter 库转储 json 字典结果 twython https github co
  • mongodb - 一个集合中的许多文档与多个集合中的许多文档

    我使用 mongodb 作为数据库存储 我的网络应用程序必须收集用户响应 用户响应是 mongodb 中的文档 或 sql 中的一行 一个文档的长度大约是10 200 用户响应被分类 仅到一个类别 每个类别的用户响应数在100 5000之间
  • 查找聚合中的管道在 mongodb 中不起作用

    我是 mongodb 的新手 所以我希望这不会成为一个非常基本的问题 我做了一些研究 并试图应用我所发现的东西 但有些东西似乎让我忽略了 我有两个以下格式的集合 Shop shopId 1002 shopPosId 10002 descri
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • 使用 Homebrew 安装 mongodb 时遇到问题

    我正在尝试让 Mongo 运行 我安装了包管理器Homebrew https brew sh 然后我使用了 Mongo 站点上的命令 brew update brew install mongodb 这似乎安装正确 我输入了mongo在新的
  • 如何在 mongodb 查询中过滤数组

    在 mongodb 中 我有一个包含单个文档的集合 如下所示 id ObjectId 5552b7fd9e8c7572e36e39df StackSummaries StackId arn aws cloudformation ap sou
  • 在 MongoDB 中按索引更新插入数组中子文档中的字段

    我有以下 MongoDB 结构 id other stuff my array title body email title body email title body email 我需要在 my array 字段内的子文档中更新 或插入
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • Mongodb upsert 嵌入文档

    我每天每米有一份文件 如果它不存在 如何在数据数组中添加另一个子文档并创建整个文档 key 20120418 123456789 data Meter 123456789 Dt ISODate 2011 12 29T16 00 00 0Z
  • 带有卷的 docker 中的 Mongo db 持久化

    我正在尝试创建一个 mongo 数据库容器 但无法使数据持久化 这是我的 docker compose yml version 3 2 services mongodb image mongo 2 4 command smallfiles
  • Rust 元组参考和参考元组

    元组引用和作为类型引用的元组之间有什么关系 为什么第一个有效但第二个不行 let a 1 let b 2 This works c i32 d i32 let c d a b type TupleOfRef lt a gt a i32 a
  • Mongodb 通过查询和分组查找

    简单收集 id 123 name FooBar zone Bas id 456 name Alice zone Bas id 789 name FooBar zone Bas 首先 我构建一个查询来按名称查找所有元素 db collecti
  • 如何验证 ObjectID

    使用 Joi 模式验证 是否可以针对 MongoDB ObjectID 进行验证 像这样的事情可能很棒 id Joi ObjectId required error errorParser 我发现如果我这样做 Joi object id J
  • Mongodb 聚合数组中的子文档

    我正在使用 mongodb 作为后端实现一个小型应用程序 在此应用程序中 我有一个数据结构 其中文档将包含一个包含子文档数组的字段 我使用以下用例作为基础 http docs mongodb org manual use cases inv
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 如何处理 MongoDB 的断开连接错误

    我在 Node js 进程中看到了这个未捕获的异常 Uncaught exception Error read ETIMEDOUT at TCP onStreamRead internal stream base commons js 16

随机推荐

  • 在 JSON 中查找深层嵌套的键/值

    假设我有一个像这样的 JSON 数组 id 429d30a1 9364 4d9a 92e0 a17e00b3afba children parentid name Expo Demo id f80f1034 9110 4349 93d8 a
  • HTACCESS - 重定向

    我有一些旧文件 homepage html 和 home html 我确信人们已经为它们添加了书签 所以我想将它们重定向到父网址 我已经浏览过谷歌 但他们似乎不符合我的期望 例如 www nicetomeetyou com home htm
  • 基于MetadataType的ASP.Net C#验证模型

    我的团队正在构建 ViewModel 并在 MetadataType 中进行模型验证 我的问题是 我使用的是非 MVC 项目 我可以用它来验证模型吗 如果是 您能举个例子吗 MetadataType typeof PersonMetadat
  • 自动打开侧载任务窗格

    是否可以自动打开处于开发人员模式的插件 根据文档 您指定自动打开的窗格仅在以下情况下才会打开 该加载项已安装在用户的设备上 如果用户这样做 打开文档时未安装加载项 自动打开 功能将不起作用并且该设置将被忽略 如果你也 要求加载项与您需要设置
  • python tkinter:检测触摸板上的水平滚动

    我有一个 大 python tkinter 画布 使用箭头键和 Shift 鼠标滚轮进行导航非常简单 但我也想通过笔记本电脑触摸板上的两根手指来完成此操作 今天我发现它可以识别水平滚动 Ubuntu 16 04 LTS Python 2 x
  • 梯度如何通过 tf.py_func 传递

    这是张量流中的 Faster R CNN 实现 The 提案层 is 实施通过蟒蛇 我很好奇梯度是否可以通过tf py func权重和偏差不断变化所以我认为梯度传递成功 然后我做了一个小测试 import tensorflow as tf
  • gcloud 可以连接,但 gsutil 无法连接

    尝试使用gcloud gsutil从笔记本电脑 gcloud可以连接但是gsutil cannot mylaptop jamiet gcloud projects list head 2 PROJECT ID NAME PROJECT NU
  • 具有安全性和配置文件效率的 MEF 插件

    我有一个具有许多模块 插件的应用程序 我使用带有目录插件的 MEF 来导入它们 每个用户都有一个存储在数据库中的可用模块列表 并且每个用户可以有多个配置文件来控制哪些模块可见 有一个概述区域 显示来自具有 ImportMany typeof
  • 重定向命令行输出以防止错误消息显示在命令窗口中

    我正在测试文件夹是否存在 并且根据它的存在 我想运行不同的命令 DIR MYDIR tmp gt test txt IF ERRORLEVEL 1 echo FOLDER DOES NOT EXIST else echo FOLDER EX
  • ES6 中的映射与对象,何时使用?

    参考 MDN 地图 当键在运行时之前未知时 以及当 所有键都是相同类型 所有值都是相同类型 当存在对单个元素进行操作的逻辑时 请使用对象 问题 在对象上使用映射的适用示例是什么 特别是 什么时候密钥在运行时之前是未知的 var myMap
  • 如何从其他活动调用主活动中的方法?

    我想从其他活动中调用主活动中的公共方法 我怎样才能做到这一点 class MainActivity extends Activity public void myMethod class MyActivity extends Activit
  • 在C中读取字符串

    如果我使用 C gets 并且我正在从用户那里读取字符串 但我不知道我需要多大的缓冲区 并且输入可能非常大 有没有办法可以确定用户输入的字符串有多大 然后分配内存然后将其放入变量中 或者至少是一种在不知道输入有多大的情况下接受输入的方法 有
  • lme4 升级产生错误消息 Error in `[[<-.data.frame`(`*tmp*`, i, value = integer(0))

    上周我用 lmer lme4 构建了一个广义混合线性模型 效果很好 fit lt lmer dat presence log dat SIZE strict dat Troph level log dat HAB500EXCL strict
  • c++:具有任意签名的 std::function 的 std::vector

    是否有可能创建一个std vector可以容纳一个std function有任何签名吗 函数参数都将被预先绑定 I tried std vector
  • 可重复读隔离级别 SELECT 与 UPDATE...WHERE

    也许你可以在这里为我阐明一些事情 数据库 MySQL 5 7 存储引擎 InnoDB 隔离级别 可重复读 下表 MyTable PK Concur 3 2 我此时没有进行任何交易 我选择此记录 例如 SELECT FROM MyTable
  • 如何修改 Mule 负载变量?

    使用 Mule 3 3 我得到了一个有效负载 它以 JSON 形式开始 我使用 java util HashMap 将其转换为对象 我可以使用 JDBC 查询很好地访问变量 message payload AddJob variable1
  • 在php中创建每周日历

    我创建了一个 php 日历 一次显示一周 这是我创建的代码 a href Next Week a a href a
  • 如何为 HTML/CSS 页面添加加载更多按钮?

    我想制作一个单页网站 它将包含大量内容 假设上面有 1000 张照片 我不希望人们等待 5 分钟才能加载我的页面 所以我想在页面底部添加 加载更多 按钮 如何使用 HTML CSS JS 做到这一点 你可以设置所有divs to displ
  • androidcursor.getBlob 不工作

    您好 我尝试在 sqlite 数据库中存储和检索图像 我的以下代码不起作用 我不确定我做错了什么 请帮忙 我创建的数据库表如下 db openOrCreateDatabase StudentDB Context MODE PRIVATE n
  • 在 Mongo/RectiveMongo 中存储/获取列表引用的值的最佳方式?

    我有一个非常常见的用例 评论列表 每个评论都有一个作者 我使用引用存储评论中对作者的引用 因为作者可以发表多个评论 现在我正在使用 ReactiveMongo 并希望尝试保持数据库访问异步 但在这种情况下 我不知道如何做 我对数据库进行异步