【问题标题】:Query (find many) documents from multiple collections with the same document structure (MongoDB & PHP)从具有相同文档结构(MongoDB 和 PHP)的多个集合中查询(查找多个)文档
【发布时间】:2019-05-27 17:34:35
【问题描述】:

我使用MongoDB PHP v1.3,在我的 MongoDB 中我有多个集合:

// COLLECTION NAMES:
- user_1_list_1
- user_1_list_2
- user_1_list_3
...
- user_1_list_55

所有这些集合都有相同的文档结构

{
   first_name
   last_name
   phone
}

如何同时查询所有这些集合中的文档?在文档中,解释了如何从 one 集合中查询(查找多个)文档:https://docs.mongodb.com/php-library/v1.3/tutorial/crud/#find-many-documents

例如,在我的例子中,它看起来像这样:

$collection_name = "user_1_list_1";
$collection = $this->db->{$collection_name};

$query = []; 

$cursor = $collection->find(
    $query,
    [
        'limit' => 10,
        'skip'  => 0,
        'sort'  => ['first_name' => 1],
    ]
);

...但这只会从一个集合中找到文档(在这种情况下,仅从名称为“user_1_list_1”的集合中)。

如何从所有这些集合中查找文档(user_1_list_1user_1_list_2user_1_list_3 ...)(具有相同的结构) ,不只是从一个特定的? 这可能吗?如果是,你会怎么做?

【问题讨论】:

  • 无法同时对多个集合执行find()。此操作在您的用例中可能有意义,但在大多数情况下并没有真正意义,因为集合通常是独立的,与其他集合几乎没有关系。为什么不遍历集合名称列表并在每个集合中进行查找?
  • @KevinAdistambha Why not loop over the list of collection names and do the find in each collection? - 因为我需要将此数据返回到带有分页(分页号链接)的前端表,该表被整理并显示,例如,每页 10 行,并且有搜索功能...(它的外观和工作方式类似于 jQuery Datatables)。因此,如果我循环遍历每个集合,然后在每个集合中查找 - 我将无法正确填充该表,它将永远无法正确排序,分页将永远无法正常工作等等。
  • 如果分页是目标,我建议避免使用跳过/限制:stackoverflow.com/questions/49194542/…
  • @kevinadi 不仅仅是分页,还有排序。无论如何,正如您所写 - 没有设施可以同时对多个集合执行 find() ......所以,这可能是不可能的,似乎“设计”(拥有一堆具有相同文档的集合 -结构而不是一个集合)是错误的和坏的。
  • 你想要做的是“加入”多个集合,这会破坏使用 MongoDB 的目的,即非关系数据库。您可以更改架构并使用嵌入式文档,或者为此使用关系数据库。

标签: php mongodb mongodb-php


【解决方案1】:

MongoDB 不是关系数据库,对于您的情况没有好的解决方案。

  1. 你可以获取你的集合并循环它(但这不是一个好方法 解决方案)。
  2. 您可以更改数据库结构并使用嵌入的集合 数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多