Скажем, я создаю схему для коллекции 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.
Я также понимаю, что при объявлении составных индексов мы должны делать это на уровне схемы. то есть:
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})
Большое спасибо, и я надеюсь, что я достаточно ясен ...