【问题标题】:MongoDB/PHP One per categoryMongoDB/PHP 每个类别一个
【发布时间】:2023-04-01 07:48:01
【问题描述】:

我有一张这样的桌子:

# 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) 知道存在哪个类别。 更好:=) ?

【问题讨论】:

  • 您可能想开始使用层次结构。您最多可以在 MongoDB 1.4+ 的文档中存储 16 MB(不确定版本号...)。另外,如果你真的想坚持这个例子,你可能想开始使用“存储过程”。
  • 为什么你一页需要5000条? @benqus MongoDB 没有存储过程。
  • 您能提供一个结果示例吗?我对你真正想做的事情感到困惑。所以你选择一个类别然后你想要另一个表中的一些数据?每个类别的entry 是什么?你的意思是你试图做一个独特的?
  • @Sammaye mongodb.org/display/DOCS/… pointbeing.net/weblog/2010/08/… 我个人在家里的 MongoDB 服务器中使用它们。您需要将函数保存在 db.system.js 集合中...
  • @benqus 这些是在 Mongo 的内置 JS 引擎中执行的,因此它们在技术上不是服务器端。新的聚合框架更多的是服务器端。另外,必须是 evaled,这在 MongoDB 的大部分内容中都不受支持,包括分片和许多其他东西。

标签: php mongodb database


【解决方案1】:

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

听起来你想要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/。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多