流星索引用于高效排序

时间:2015-03-29 07:02:57

标签: mongodb sorting indexing meteor

我想在出版物中使用Meteor对后端的文档集合进行排序。我想确保我正确地索引集合,我找不到任何具体的方法来为我想要的字段做这个。

基本上我想找到集合“S”中的字段“a”等于特定字符串值的所有文档。然后,在我拥有所有这些文档之后,我想按三个字段对它们进行排序:b,c(降序)和d。

这是将其编入索引的正确方法:

S._ensureIndex({ a: 1 });
S._ensureIndex({ b: 1, c: -1, d: 1 });

S.find({ a: "specificString"}, { sort: { b: 1, c: -1, d: 1 } });

作为奖励问题,字段“d”是以毫秒为单位添加的时间,并且不太可能存在包含所有3个字段相同的重复文档。我是否还应该在索引中包含唯一选项?

S._ensureIndex({ b: 1, c: -1, d: 1 }, { unique: true });

添加唯一选项是否有助于排序和索引性能? 我还想知道mongo的索引排序的一般性能是什么?在他们的页面上,它表示索引排序不需要在内存中完成,因为它只是在读取。这是否意味着排序是即时的?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

我能在这里找到自己的答案: http://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-and-non-prefix-subset-of-an-index

基本上,我的示例索引的正确方法是:

NSString *__autoreleasing *string = (NSString*__autoreleasing*)dlsym(RTLD_DEFAULT, "<name of constant like PKPaymentNetworkVisa>");`
NSLog(@"%@", *string);

- 关于我的其他问题。

  1. 因为您在这里使用索引,所以性能是即时的。但请记住,拥有4字段索引在其他方面可能非常昂贵。

  2. 不确定这一点......我的预感是,包括“unique:true”在性能上没有任何影响,因为它已经是即时的。