复合索引和单一索引的猫鼬索引

时间:2020-03-25 01:38:05

标签: mongodb mongoose mongodb-indexes

说我正在为消息集合创建一个架构。对于每条消息,它都应具有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
  }
});

我了解通过这样声明,可以有效地查询:

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

我的问题是,当在Schema级别中按顺序声明索引时(之所以这样做,是因为category的基数比用户的基数低),我是否能够仅对用户进行有效查询?即:

Message.find({user: USER_ID})

非常感谢,我希望我足够清楚...

0 个答案:

没有答案
相关问题