MongoDB порядок сортировки и уникальные поля - PullRequest
0 голосов
/ 24 августа 2018

Я использую схему мангуста, подобную этой:

{
  numero: {
    type: Number,
    required: true,
    unique: true
  },
  capacidad: {
    type: Number,
    required: true
  }
}

Когда я получаю документы коллекции (например, используя Model.find({})), я получаю документы, отсортированные по _id.

Мои вопросы:

  • MongoDB создает индекс для обработки требования unique: true, но не использует его в качестве механизма сортировки по умолчанию?
  • Если я это сделаюModel.find({}).sort("numero") использует ли этот индекс для обработки уникальности или должен создать другой для моего запроса?
  • Если я определю свой собственный индекс (schema.index ({цифра: 1}), дублирую ли я работу?
  • Подводя итог, каковы лучшие методы для поддержания коллекции, отсортированной для запросов?

1 Ответ

0 голосов
/ 25 августа 2018

Сначала отметим, что вы говорите более конкретно о том, как Mongoose работает как посредник с MongoDB.Под этим я подразумеваю то, что в схеме mongoose, определяющей что-то вроде этого:

numero: {
  type: Number,
  required: true,
  unique: true
}

Фактически означает, что (используя unique: true) вы ARE создаете уникальный индекс для поля numero, а часть index: true является необязательной согласно документации .

Так что вам не нужно фактически создавать другой индекс.

Это также должно отвечать вашимвопрос о том, Model.find({}).sort("numero") также использовать индекс.

Что касается передового опыта, вы должны проанализировать, как вы запрашиваете свои данные, и очень важно, какой тип данных у вас есть, чтобы выяснить, какого родаИндекс вам нужен.Например, если у вас есть данные lat/lng, вы, вероятно, должны использовать Geospatial Index и т. Д.

Вы также не хотите сходить с ума по индексации, поскольку это также вызывает другие проблемы .

Также очень важным инструментом для обзора того, что делает MongoDB, является оператор объяснения , который предоставляет вам информацию о плане запроса.

Вы должны часто использовать его для анализа иоптимизируйте свои запросы и выясните, где находятся ваши узкие места.

Также вы можете просматривать статистику своей коллекции с помощью

db.getCollection('your-collection-name').stats()

, которая даст вам хорошую информацию о текущих индексах коллекции, их размере и т. д..

Надеюсь, это поможет.

...