我们在 Mongodb 中对我们的大部分集合进行版本控制。选择的版本控制机制如下:
{ "docId" : 174, "v" : 1, "attr1": 165 } /*version 1 */
{ "docId" : 174, "v" : 2, "attr1": 165, "attr2": "A-1" }
{ "docId" : 174, "v" : 3, "attr1": 184, "attr2" : "A-1" }
因此,当我们执行查询时,我们总是需要以这种方式使用聚合框架来确保获取对象的最新版本:
db.docs.aggregate( [
{"$sort":{"docId":-1,"v":-1}},
{"$group":{"_id":"$docId","doc":{"$first":"$$ROOT"}}}
{"$match":{<query>}}
] );
这种方法的问题是,一旦你完成了分组,你在内存中有一组与你的集合无关的数据,因此你的索引不能被使用。
因此,您的集合拥有的文档越多,查询速度就越慢。
有什么办法可以加快这个速度吗?
如果没有,我会考虑转向这篇好文章中定义的一种方法:http ://www.askasya.com/post/trackversions/