使用相同文档结构的多个集合中查询(查找多个)文档(MongoDB和PHP)。

7

我使用 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
}

如何同时从这些集合中查询文档?在文档中,解释了如何从一个集合中查询(查找多个)文档: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_1, user_1_list_2, user_1_list_3 ...) 中查找文档(它们具有相同的结构),而不仅仅是从一个特定的集合中查找?这是否可能?如果可以,你会如何做到呢?


没有一种可以同时在多个集合中执行find()的功能。在您的使用情况下,这个操作可能是有意义的,但在大多数情况下并不是很有意义,因为一个集合通常是独立存在的,与其他集合关系较小。为什么不遍历集合名称列表,并在每个集合中执行查找呢? - kevinadi
@KevinAdistambha “为什么不循环遍历集合名称列表并在每个集合中进行查找?”- 因为我需要将这些数据返回到一个带有分页(分页数字链接)的前端表格中,该表格已经排序并显示每页10行,并具有搜索功能...(它看起来和jQuery Datatables类似)。因此,如果我循环遍历每个集合,然后在每个集合中查找 - 我将无法正确填充该表格,它永远无法正确排序,分页永远无法正常工作等等。 - PeraMika
如果分页是目标,我建议避免使用跳过/限制:https://stackoverflow.com/questions/49194542/pagination-in-mongodb-avoid-skip-and-limit - kevinadi
@kevinadi 不仅是分页,还有排序。无论如何,正如你所写的 - 没有一种方法可以同时在多个集合上执行find()...因此,这似乎是不可能完成的,看起来“设计”(拥有许多具有相同文档结构的集合而不是一个集合)是错误和不好的。 - PeraMika
你想要做的是“JOIN”多个集合,这将违背使用MongoDB的目的,即非关系型数据库。你可以改变你的模式并使用嵌入式文档,或者也许使用关系型数据库来解决这个问题。 - Maximiliano Nunes Catarino
尝试使用$lookup和$unwind。 - Bishal Jaiswal
1个回答

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接