MongoDB / PHP每个类别一个

时间:2012-08-22 12:30:15

标签: php mongodb database

我有一张像这样的桌子:

# 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

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

# 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...
   }
}

由于集合非常庞大且有大量的cat和datas,因此可以生成大约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 loop”的情况下完成?我们有数组:array(1,2)知道哪个类别存在。 更好:=)?

1 个答案:

答案 0 :(得分:0)

  

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

听起来你想要distinct

> 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/

  

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

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