查询MongoDB以获取最后一项

时间:2011-08-29 10:40:02

标签: algorithm mongodb

考虑我在MongoDB中有两个集合。一个用于包含以下文档的产品:

{'_id': ObjectId('lalala'), 'title': 'Yellow banana'}

另一个商店的价格变化与文件如:

{'product': DBRef('products', ObjectId('lalala')),
 'since': datetime(2011, 4, 5),
 'new_price': 150 }

一种产品可能会有很多价格变动。价格会持续到新的更改以及以后的时间戳。我想你已经抓住了想法。

说,我有100个产品。我想查询我的数据库,以了解2011年6月9日每个产品的价格。在MongoDB中执行此查询的最有效(快速)方法是什么?假设我没有缓存解决方案或缓存是空的。

我考虑了group集合上的prices声明,其中reduce函数会在提供日期之前选择最后since,按product.$id进行分组。但在这种情况下,我不会从since字段上的索引中受益,并且将扫描所有文档。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我有类似的问题,但对于GPS位置。我发现最快的方法是为每个项目设置一个查询,如果你习惯使用SQL数据库,那就相当直观了。

查询其时间戳小于或等于您查找日期的项目,并将结果限制为1.对每个项目重复此操作。要真正加快速度,请并行运行多个查询以利用MongoDB服务器上的所有核心。