Пн goose Индексация для составного индекса и отдельного индекса - PullRequest
0 голосов
/ 25 марта 2020

Скажем, я создаю схему для коллекции Message . Для каждого сообщения должно быть 3 поля: пользователь, который его опубликовал, категория, в которой опубликовано сообщение, а также содержимое самого сообщения.

const messageSchema = new mongoose.Schema({
  user: {
    type: String,
    required: true
  },
  category: {
    type: String,
    required: true
  },
  content: {
    type: String,
    required: true
  }
});

Теперь представьте, что у меня есть 3 запроса:

  1. Я хотел бы запросить все сообщения, опубликованные всеми пользователями для определенной категории.
  2. Я хотел бы запросить все сообщения, опубликованные одним конкретным пользователем для определенной категории.
  3. Я хотел бы запросить все сообщения, опубликованные одним конкретным пользователем, для ВСЕХ категорий. (в основном, все его сообщения)

Как мне правильно объявить свою индексацию в схеме? Я понимаю, что то, что я делаю, является составным индексом для 1 и 2, но единственным индексом для 3.

Я также понимаю, что при объявлении составных индексов мы должны делать это на уровне схемы. то есть:

messageSchema.index({ category: 1, user: 1 });

и НЕ на уровне поля (исправьте меня, если я ошибаюсь, и мне нужно объявить это на обоих уровнях ...) т.е.:

const messageSchema = new mongoose.Schema({
  user: {
    type: String,
    required: true,
    index: true
  },
  category: {
    type: String,
    required: true,
    index: true
  },
  content: {
    type: String,
    required: true
  }
});

I понимаю, что, объявив это таким образом, я могу эффективно запросить:

Message.find({category: CAT_ID, user: USER_ID})

Мой вопрос заключается в том, чтобы при объявлении индексов в порядке на уровне схемы (я так и сделал, поскольку категория имеет меньшую мощность, чем пользователь), я могу эффективно запросить только для пользователей? то есть:

Message.find({user: USER_ID})

Большое спасибо, и я надеюсь, что я достаточно ясен ...

...