嵌套文档中字段的Mongoose索引

时间:2017-02-21 13:14:59

标签: node.js mongodb mongoose

我有一个小模式

var PostSchema = new mongoose.Schema({
  title: String,
  link: String,
  author: {type:String,required:true},
  upvotes: {type: Number, default: 0},
  nesteddoc : {
      field1: String
  }
});

//This is broken - index on field1
PostSchema.index({nesteddoc.field1:1},{unique:true});

通过在Mongoose模式中指定并且不运行MongoDB查询来确保索引,是否可以在嵌套字段上建立索引?

1 个答案:

答案 0 :(得分:3)

"nesteddoc.field1"周围使用引号来评估嵌套字段:

PostSchema.index({ "nesteddoc.field1": 1 }, { unique: true });

此外,猫鼬会从mongoose doc内部拨打ensureIndex

  

当您的应用程序启动时,Mongoose会自动调用   ensureIndex用于架构中的每个已定义索引。猫鼬会打电话   依次为每个索引的ensureIndex,并在其上发出'index'事件   所有ensureIndex调用成功或存在时的模型   一个错误。虽然很适合开发,但建议使用此行为   在生产中被禁用,因为索引创建可能会导致重大问题   绩效影响。通过设置autoIndex禁用该行为   您的架构的选项为false,或者是全局的连接   将选项config.autoIndex设置为false。

您还可以在架构中定义索引:

var PostSchema = new mongoose.Schema({
    title: String,
    link: String,
    author: { type: String, required: true },
    upvotes: { type: Number, default: 0 },
    nesteddoc: {
        field1: { type: String, unique: true, index: true },
    }
});