2013-09-22 3 views
0

Я хочу воссоздать модели в базе данных после сброса всего в ней.Повторно создайте модели с помощью Mongoose

Mongoose (или сам Mongo) фактически воссоздает документы, но не индексы. Итак, есть способ сбросить Mongoose, чтобы он мог воссоздавать индексы, как если бы они работали в первый раз?

Причина, по которой я использую dropDatabase, заключается в том, что во время тестирования кажется более легким. В противном случае мне пришлось бы удалить все коллекции по одному.

ответ

1

Хотя не рекомендуется для использования в производстве, в зависимости от сценария, вы можете добавить index свойство к определению поля для задания вы хотите индекс, созданный:

var animalSchema = new Schema({ 
    name: String, 
    type: String, 
    tags: { type: [String], index: true } // field level 
}); 

animalSchema.index({ name: 1, type: -1 }); // schema level 

Или

var s = new Schema({ name: { type: String, sparse: true }) 
Schema.path('name').index({ sparse: true }); 

Или вы можете позвонить по телефону ensureIndex по телефону Model (docs):

Animal.ensureIndexes(function (err) { 
    if (err) return handleError(err); 
}); 
+0

Я переключился на подход, когда я бросаю тестовую базу данных через скрипт перед началом тестирования. Но как и обратная связь, ваше первое решение также не работает. Я думаю, что после создания модели она кэширует ее и не проверяет индексы. Метод secureIndexes может работать, поэтому я принимаю это как ответ. –

+0

Он должен работать, если вы перезапустите приложение узла. – WiredPrairie

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