考虑我在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
字段上的索引中受益,并且将扫描所有文档。
有什么想法吗?
答案 0 :(得分:1)
我有类似的问题,但对于GPS位置。我发现最快的方法是为每个项目设置一个查询,如果你习惯使用SQL数据库,那就相当直观了。
查询其时间戳小于或等于您查找日期的项目,并将结果限制为1.对每个项目重复此操作。要真正加快速度,请并行运行多个查询以利用MongoDB服务器上的所有核心。