【发布时间】: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_1、user_1_list_2、user_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