我在mongodb(pymogno驱动程序)中遇到了我的查询问题。
这是我的问题: 我必须每天向mongodb插入(更新)大约1亿(1亿)个文件。 我放弃了使用更新相同的关键字段我必须更新附加,并修改为使用批量插入(更新性能比批量插入慢)。
这是我的数据库中的草图方案。
{_id:xxx, F1:1 , F2:"test1", TS": 2011/01}
{_id:xxx, F1:1 , F2:"test2", TS": 2011/02}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/03}
{_id:xxx, F1:3 , F2:"test1", TS": 2011/04}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/05}
.....
(4 billion up or more)
当我查询时,我只想通过F1(field1)检索最新的TS组。
我知道“组”聚合框架可以做到这一点,但我已经分享了我的数据库和组操作,不允许分片db。
我还尝试使用map-reduce来做到这一点,但它没有提供足够好的查询性能。
我使用的唯一查询是“$ in”操作。
db.test.find({"F1":{"$in":[1,2,3,....]}})
它检索目标数组中的所有文档,但我只想获得每个键F1的最新文档。
{_id:xxx, F1:1 , F2:"test2", TS": 2011/02}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/05}
{_id:xxx, F1:3 , F2:"test2", TS": 2011/03}
我怎么能得到它?
PS。 目标数组可能包含我要批量查询的一百万个元素。
有没有好方法呢?
答案 0 :(得分:0)
虽然没有单步解决这个问题的方法,因为你不能像你提到的那样在分片中使用聚合框架(即使它确实可能也不会很好),你可能想要探索像这样的解决方案: