2017-02-21 3 views
0

У меня есть небольшая схема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

Используйте кавычки "nesteddoc.field1" для оценки вложенного поля:

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

Кроме того, мангуст будет вызывать ensureIndex внутри, от mongoose doc:

При запуске приложения, Mongoose автоматически вызывает ensureIndex для каждый определенный индекс в вашей схеме. Mongoose вызовет securityIndex для каждого индекса последовательно и испустит событие «index» на модели, когда все вызовы secureIndex преуспели или произошла ошибка . Хотя это хорошо для разработки, рекомендуется, чтобы такое поведение было отключено в процессе производства, поскольку создание индекса может привести к значительным последствиям производительности . Отключите это поведение, установив для параметра 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 }, 
    } 
}); 
Смежные вопросы