2015-03-29 3 views
0

Я хочу отсортировать коллекцию документов на бэкэнд с помощью 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 }); 

Будет ли добавлена ​​уникальная опция помощи при любой сортировке и индексировании? Мне также интересно, что общего было для индексированного сортировки по монго? На их странице говорится, что индексированные сортировки не нужно делать в памяти, потому что они просто читают. Означает ли это, что сорт мгновен?

Спасибо за вашу помощь :)

ответ

1

я смог найти свой ответ здесь: http://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-and-non-prefix-subset-of-an-index

В принципе правильный путь к индексу для моего примера здесь является:

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

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

- Что касается моих других подтекстов.

  1. Поскольку вы используете здесь индекс, производительность мгновенная. Однако имейте в виду, что с 4-мя полевыми индексами могут быть очень дорогими другими способами.

  2. Не уверен, что это наверняка .... моя догадка заключается в том, что включение «unique: true» не повлияет на производительность, поскольку оно уже мгновенно.

Смежные вопросы