gpt4 book ai didi

mongodb - 在 MongoDB 中搜索多个集合

转载 作者:IT老高 更新时间:2023-10-28 11:04:15 26 4
gpt4 key购买 nike

我知道 MongoDB 的理论和不支持连接的事实,我应该尽可能使用嵌入文档或非规范化,但这里是:

我有多个文档,例如:

  • 嵌入郊区的用户,但也有:名字,姓氏
  • 嵌入国家的郊区
  • 嵌入School的Child属于一个User,但也有:first name, last name

例子:

Users:
{ _id: 1, first_name: 'Bill', last_name: 'Gates', suburb: 1 }
{ _id: 2, first_name: 'Steve', last_name: 'Jobs', suburb: 3 }

Suburb:
{ _id: 1, name: 'Suburb A', state: 1 }
{ _id: 2, name: 'Suburb B', state: 1 }
{ _id: 3, name: 'Suburb C', state: 3 }

State:
{ _id: 1, name: 'LA' }
{ _id: 3, name: 'NY' }

Child:
{ _id: 1, _user_id: 1, first_name: 'Little Billy', last_name: 'Gates' }
{ _id: 2, _user_id: 2, first_name: 'Little Stevie', last_name: 'Jobs' }

我需要实现的搜索是:

  • 用户和 child 的名字、姓氏
  • 来自用户的状态

我知道我必须执行多个查询才能完成它,但是如何实现呢?使用 mapReduce 还是聚合?

你能指出一个解决方案吗?

我尝试使用 mapReduce,但这并没有让我从用户那里获得包含 state_id 的文档,所以这就是我在这里提出它的原因。

最佳答案

This answer is outdated. Since version 3.2, MongoDB has limited support for left outer joins with the $lookup aggregation operator

MongoDB 不执行跨越多个集合的查询 - 周期。当您需要连接来自多个集合的数据时,您必须在应用程序级别通过执行多个查询来完成。

  1. 查询集合 A
  2. 从结果中获取辅助键并将它们放入数组中
  3. 查询集合 B 将该数组作为 $in-operator 的值传递
  4. 在应用层以编程方式加入两个查询的结果

必须这样做应该是异常(exception)而不是常态。当您经常需要模拟这样的 JOIN 时,要么意味着您在设计数据库架构时仍然考虑过于关系化,要么您的数据根本不适合 MongoDB 的基于文档的存储概念。

关于mongodb - 在 MongoDB 中搜索多个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com