基于路径的文档排序的MongoDB索引策略

时间:2015-10-11 19:47:16

标签: mongodb optimization indexing

给定一组如下所示的文档,如果子文档中存在不确定数量的路径,那么在顶级排序键上创建排序索引的最佳策略是什么?

{_id: 1, title: "Document 1", sort:{somePathA: 3, somePathB: 1, somePathC: 3}}
{_id: 2, title: "Document 2", sort:{somePathA: 1, somePathB: 2, somePathC: 2}}
{_id: 3, title: "Document 3", sort:{somePathA: 2, somePathB: 3, somePathC: 1}}

例如,以下命令:

db.find().sort({'sort.somePathC': 1});

应该产生以下输出:

{_id: 3, title: "Document 3", sort:{somePathA: 2, somePathB: 3, somePathC: 1}}
{_id: 2, title: "Document 2", sort:{somePathA: 1, somePathB: 2, somePathC: 2}}
{_id: 1, title: "Document 1", sort:{somePathA: 3, somePathB: 1, somePathC: 3}}

1 个答案:

答案 0 :(得分:1)

因此在Sort子文档中可能有一个名为somePathK的字段,也许不是。成员数量不是常数,而且是动态的。如果我理解正确,您需要在新成员加入子文档时运行db.collection.createIndex({'sort.somePathK':1},{background:true, sparse:true})函数。如果未找到索引,该函数将创建索引。需要Sparse表达式,因为嵌入的排序文档可能因文档而异。

然后可以有效地使用find().sort({'sort.fieldName': 1})方法。

另一方面,服务器RAM size应被视为性能。

案件似乎难以管理。因此,未知数量的索引意味着需要未知的RAM大小。我认为相同的考虑因素同样适用于所有其他数据库系统。

为了获得良好的性能,需要索引并存储已排序的索引,需要适合RAM。

祝你好运..