2016-10-25 9 views
0

Каждый раз, когда я делаю изменение схемы, Как я добавил уникальный индекс или задал «разреженный: истинный» для поля, мне нужно отбросить коллекцию для внесения изменений. Это невозможно для меня на рабочем сервере. Есть ли другой способ сделать изменения в коллекциях, не отбрасывая их? Я новичок в mongodb. Поскольку я использую mlab, я также не могу перезапустить службу mongo. Пожалуйста, помогите мне с этим.Mongodb применяет изменения модели, не отбрасывая коллекцию

Примечание: Я использую nodejs версии 4.2.0, mongoose 4.4.7, mongodb 3.2.9 (Я использую mlab).

+2

Что вы имеете в виду, вам нужно отбросить коллекцию, когда добавьте уникальный индекс или установите разреженный? Это 100% ложно. – sergiuz

+1

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

+0

. Я не думаю, что вам нужно удалить всю коллекцию для этого, если ваше индексное поле присутствует в новом документе. можете ли вы поделиться новым и старым документом? – rushUp

ответ

0

Нет необходимости бросать коллекцию и воссоздавать ее при изменении схемы.

Дополнительная информация:

разреженные индексы содержат только записи для документов, имеющих индексированную поле, даже если поле индекса содержит нулевое значение. Индекс пропускает любой документ, в котором отсутствует проиндексированное поле. Индекс «разрежен», потому что он не включает все документы коллекции. Напротив, не разреженные индексы содержат все документы в коллекции, сохраняя нулевые значения для тех документов, которые не содержат проиндексированного поля.

разреженный индекс и Неполные результаты

Если разреженный индекс приведет к неполному результирующего набора для запросов и операций сортировки, MongoDB не будет использовать этот индекс, если подсказка() явно указывает индекс.

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

Пожалуйста см коллекции ниже

Collection marks 
{_id:1, sub1: 67, sub2: 78, sub3: 56, total: 201} 
{_id:2, sub1: 60, sub2: 70, sub3: 50, total: 180} 
{_id:3, sub1: 80, sub2: 70, sub3: 50} 

Create sparse index 

db.marks.createIndex({ total: 1 } , { sparse: true, unique: true }) 


db.marks.find().sort({ total: -1 }) 
This query will return all the 3 records, we have applied sort on the sparse indexed field, but MongoDB will not select the sparse index to fulfill the query in order to return complete results. 

db.marks.find().sort({ total: -1 }).hint({ total: 1 }), this query will return only 2 records, those who are having the total, so to use the sparse index, explicitly specify the index with hint() 

Ссылки

https://docs.mongodb.com/manual/core/index-sparse/

https://docs.mongodb.com/manual/core/index-sparse/#sparse-index-incomplete-results

Надеется, что это помогает!