说我正在为消息集合创建一个架构。对于每条消息,它都应具有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
}
});
我了解通过这样声明,可以有效地查询:
Message.find({category: CAT_ID, user: USER_ID})
我的问题是,当在Schema级别中按顺序声明索引时(之所以这样做,是因为category的基数比用户的基数低),我是否能够仅对用户进行有效查询?即:
Message.find({user: USER_ID})
非常感谢,我希望我足够清楚...