我有一个小模式
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查询来确保索引,是否可以在嵌套字段上建立索引?
答案 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 },
}
});