问题标签 [mongodb-lookup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
72 浏览

mongodb - 在 MongoDb 聚合查找中, let 是否需要特殊格式?

我正在尝试将 MongoDB $lookup 与不相关的子查询一起使用。
使用 MongoDB 3.6.12(从 3.6 开始支持) https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-uncorrelated-sub-queries

以下管道步骤正在运行,但是如果我将第一个“userB”换成第二个,则不会返回任何结果。

带有硬编码 ObjectId 的结果:

使用变量的结果:

我觉得 ObjectIds 需要特殊处理。我能找到的所有示例都使用简单的变量,如字符串。

为了验证 '$$requestUser' 包含一个值,我在投影上对其进行了测试:

0 投票
1 回答
160 浏览

mongodb - MongoDB 多个子查询

我对 no-sql 数据库有点陌生,所以我在这里有一个关于子查询的问题。

让我们想象一下以下结构:

我需要通过 subId 找到所有类型。

我不知道它对 MongoDB 是如何工作的,在 SQL 中我会做类似的事情:

对于 MongoDB,我尝试创建某种聚合查询,但它不起作用:

这里有什么建议吗?

0 投票
1 回答
42 浏览

mongodb - 如何使用带有 $lookup 的 MongoDB 聚合来用整个文档替换包含 id 的属性?

我有两个收藏:

用户

血统

现在我想做一个聚合来替换user.bloodlineId整个血统文件。这就是我试图做到的:

结果几乎是我想要的:

这里只有两个问题。第一个bloodlineId是仍然存在,bloodline只是添加到结果中。我想bloodline替换bloodlineId属性。

第二个问题是bloodline数组。我希望有一个单一的对象。

0 投票
1 回答
281 浏览

mongodb - MongoDB 查找算法复杂度

MongoDB 查找操作的大复杂度是多少?
假设我的MongoDB集合'A'中
有n条记录,集合'B'中有n条记录,每个B的文档都有A的外部_id和一个特定的标签,例如"preOrder","directOrder", "pendingOrder" ...

案例 1:
如果我使用一些过滤器在集合“A”上添加匹配查询,并使用 B 集合添加查找。
我得到了一个 B 的数据对象数组,我循环遍历每个对象的每个数组以执行一些操作并计算每个标签的计数

案例2:
在集合'A'上添加匹配查询,过滤器
循环遍历每个结果并在循环中查询匹配B的记录

mongo 服务器上的时间和负载会有什么不同?

0 投票
1 回答
30 浏览

database - 如何在 MongoDB 中应用 $lookup,如果第二个集合上的记录被删除,仍然给出第一个集合的所有记录的响应

如何在 MongoDB 中应用 $lookup,如果第二个集合上的记录被删除,仍然给出第一个集合的所有记录的响应,如给定示例所示

第一次收藏

第二次收藏

]

想要回应——

]

我写一个查询——

])

它只返回树记录,不返回--

_id : "d" , P : "dljslfsdjf", BB: {**anything that indicate record not found**}

0 投票
2 回答
109 浏览

mongodb - 带有项目请求字段的一对多 MongoDB 查找

我有两个集合的一对多关系,比如 A 到 B。我怎样才能在一个文档中为每个 id 显示所需的输出。例如,我有

...//其他文档

//...其他文档为不同的ID,例如abc1,abc2

基于 id 查找后如何实现以下输出?这是每个 id 一个文档。

0 投票
1 回答
38 浏览

mongodb - MongoDB - 查找 - 多个集合 - 结果在一个数组中

网站集字段 -_id, name

节点集合字段 -_id, siteId, name

设备收集字段 -_id, nodeId, name

传感器采集领域 -_id, deviceId, name

我是 MongoDB 新手,预期结果(没有重复数据):

正如我之前提到的,我是 MongoDB 的新手,我尝试了以下查询,但没有得到预期的结果

以下是当前响应,其中node, device,sensor处于同一级别,预期是站点 -> 节点 -> 设备 -> 传感器。

0 投票
1 回答
65 浏览

arrays - MongoDB聚合在根中创建内部数组

嗨,我有两个收款人部门。这些集合具有以下属性。

我想聚合一个内部数组并将其添加到文档的根目录中。请在下面检查我需要的结果:

人:

部:

到目前为止,我已经尝试过,但没有得到所需的结果

我想得到的结果是

结果:

0 投票
0 回答
59 浏览

mongodb - 对所有动态引用字段(如果存在)执行查找

我有一个相当复杂的情况要解决。我有一个非常动态的模型,它允许引用其他对象(在同一个集合中)。引用可以是单个值或引用数组。此外,这些名称事先并不知道(在本例中,我将它们命名为 ref1 和 ref2,但它们可能是任何名称)。标识引用对象的是存在具有 key referenceId 的字段。我实际上确实解决了这部分问题(见下文)。示例数据看起来像这样(为了简单起见,我选择了字符串而不是 ObjectIds):

所需的结果将是(在执行查找并将结果对象替换为内联之后) - 这里对于 id = 2 的对象:

经过大量试验后,我想出了一个聚合管道的想法,它产生以下输出:

这非常接近我想要的,但是,我在这个阶段遇到了以下问题:

  • 如何删除不需要的字段?由于 $lookup 的 $unwinding,我有重复的字段,这些字段在我的最终结果中不想要(查找 ref2 的 ref1 和 ref1 的 ref2)
  • 如何通过动态(又名不可预测)字段名称(在本例中为 ref1 和 ref2?)将结果分组到一个对象中?

这在 MongoDB 中可行吗?我是在正确的道路上还是我应该考虑在客户端(如后端)代码中做的事情?我更愿意在聚合中解决这个问题,因为客户端代码会对性能产生影响。

以下是我目前正在采取的步骤:

蒙古游乐场

  1. 通过 $objectToArray 将结果转换为数组,并通过检查 referenceId 键的存在来仅获取我感兴趣的键。如果存在,则返回 [key, value] 对,否则返回 null:(匹配上面数据中的第二个对象)
  1. 过滤掉后续映射的空值:
  1. 对于查找,我需要固定的字段名称,因此将结果转换为 {"k": , "v": "} 的数组
  1. 展开结果以使用 av 字段执行查找:
  1. 对“已解析”字段执行查找,展开它,并将其转换为名称为(在我上面的示例中为~ ref1,ref2)的对象,并将其添加到结果文档中。

最后删除临时字段

有人愿意挑战还是我太努力了?;-)

0 投票
0 回答
18 浏览

node.js - 数据未使用 mongodb 填充到 nodejs 的选项标签中

我正在使用简单的查询根据由 0 或 1 组成的用户类型来查找附近的餐馆。0 表示餐馆,1 表示杂货店。我想用标签表查找。该字段包含对象 ID 的标记数组。我也只想填充标签结果。但没有找出为什么我的查询没有运行