2015-02-15 5 views
1

У меня есть следующая схема:Mongoose не создает текстовый индекс

entrySchema = new mongoose.Schema({ 

    size: { type: Number }, 

    title: {type: String, trim: true }, 
    content: { type: String, trim: true }, 

    tags: { type: [String], trim: true, index: true }, 
    author: { type: String, trim: true, index: true } 
    }); 


entrySchema.index({ title: "text", content: "text" }); 

module.exports = mongoose.model('Entry', entrySchema); 

Проблема заключается в том, что мангуст не создает текстовые индексы. Однако индексы для тегов и автора создаются правильно.

Я использую функцию index() неправильно?

У меня нет ошибок в сеансе mongod. Он регистрирует успешное создание индекса для нетекстовых индексов, но кажется, что мангуст никогда не вызывает ensureIndex для текстовых индексов.

+1

Я думаю, что вы не можете создать составной индекс с двумя текстовыми индексами: «Компонентный текстовый индекс не может содержать другие специальные типы индексов, такие как поля с несколькими ключами или геопространственными индексами» (http: //docs.mongodb. org/manual/core/index-text/# text-index-compound) – joao

+0

@joao, поскольку я понял, что это именно то, что нужно сделать, как описано в http://docs.mongodb.org/manual/tutorial/create- text-index-on-multiple-fields/ – codingFriend1

+0

Вы совершенно правы. – joao

ответ

0

После отладки, описанной в Mongoose Not Creating Indexes (спасибо @JohnyHK за ссылку), я увидел, что фактическая проблема не была текстовым индексом.

Я использовал плагин mongoose-auto-increment, что привело к ошибкам, индексирующим поле _id. Решение было автоинкрементые не использовать _id поле, но отдельное поле, как это:

entrySchema.plugin autoIncrement.plugin, { 
    model: 'Entry' 
    startAt: 1000 
    field: 'shortId' 
} 

Я просто не вещь о том, что, так как индексация работала нормально без полнотекстового индекса. Кажется, что существует некоторая несовместимость с плагинами и текстовыми индексами.

Смежные вопросы