0

我有一张这样的桌子:

# TABLE IN DB
| Cat | Date    | ... datas ... |
| 1   | 11-02   | data2
| 2   | 11-04   | data2
| 1   | 12-01   | data1
| 2   | 12-01   | data1
| 2   | 12-03   | data3
| 2   | 12-04   | data4

我的挑战是为每个类别获取一个条目并选择一个特定的数据(这里我们选择 data1)。输出示例:

# TABLE RESULT
| Cat | Date    | ... datas ... |
| 1   | 11-02   | data2
| 2   | 11-04   | data2

实际上我得到了一个数组中的所有类别编号和另一个数组中的所有数据。然后我创建两个循环“foreach”:

foreach ($array_cat as $cat){
   foreach($array_data as $data){
        MONGO_FIND_HERE...
   }
}

因为集合非常大,并且有很多猫和数据,这可以进行大约 1000-5000 次查询,需要 10 到 20 秒才能完成。

我怎样才能让它更快,对不起,我是 MongoDB 的新手,但我喜欢它 :)

编辑1:简单的例子

| Cat | Date    | ... datas ... |
| 1   | 11-02   | data2
| 2   | 11-04   | data2
| 1   | 12-01   | data1
| 2   | 12-01   | data1
| 2   | 12-03   | data3
| 2   | 12-04   | data4

我怎样才能每个类别只有一个具有最新日期和“data2”的条目?我应该使用什么结构/架构?

# TABLE RESULT
| Cat | Date    | ... datas ... |
| 1   | 12-04   | data2
| 2   | 12-04   | data2

我应该使用什么机制?如何在不使用“for循环”的情况下做到这一点?我们有数组:array(1,2) 知道存在哪个类别。更好:=)?

4

1 回答 1

0

我的挑战是为每个类别获取一个条目并选择一个特定的数据(这里我们选择 data1)。

听起来你想要与众不同

> db.runCommand({distinct: "coll", key: "category", query : {datas: "data1"}})

有关 PHP 示例,请参阅http://php.net/manual/en/mongodb.command.php

我怎样才能每个类别只有一个具有最新日期和“data2”的条目?

如果您知道最晚日期(例如,查询 12-04),您可以再次使用 distinct:

> db.runCommand({distinct: "coll", key: "category", query : {date: "12-04", datas: "data2"}})

如果最新日期可能因类别而异,则需要使用聚合框架:http ://docs.mongodb.org/manual/aggregation/ 。

我应该使用什么结构/架构?

根据这些信息很难知道,我不太确定你在存储什么(什么是数据?),有多少(例如,每个数据有多少类别或每个数据的日期)或者如果这个是您的应用程序通常会执行的查询类型。

于 2012-08-24T20:53:04.713 回答