【发布时间】: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 的大部分内容中都不受支持,包括分片和许多其他东西。