2015-04-17 2 views
1

Документы в Collection содержат поле userId, в котором хранится _id пользователя, создавшего документ. Пользователь может создавать много документов.Метеор как эффективно публиковать документы из коллекции?

_id этого документа хранится в массиве внутри профиля пользователя whcih содержит все документы _id, что они создали

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

Collection.find({_id: {$in: {arrayOf_ids}}}) 

или

Collection.find({'userId': this.userId}) 

ответ

2

Давайте поддержим клещ ... Если 1 пользователь имеет много докторов, и каждый документ имеет 1 пользователь, почему вы хранить его в 2-х местах? Вы удваиваете свои записи в DB &, открывая себе несоответствия. Просто сохраните userId в документе, указав это поле, & сделайте с ним.

Чтобы ответить на ваш вопрос: Первый не будет действительно использовать индекс, потому что вы по существу передаете массив, в котором mongo должно пройти через итерацию, чтобы увидеть, совпадает ли 1 из значений с идентификатором. Если ваш _id были 3, это примерно эквивалентно:

array = [1,2,3] 
array.indexOf(3); 

Вы можете проверить, что по телефону .explain() и посмотреть, сколько документов она прикасается, индекс он использует, & время, необходимое.

К счастью, ничто из этого не имеет значения, пока вы не доберетесь до сотен тысяч, но хорошее планирование работы впереди!

+0

У одного пользователя есть много документов, так как я объяснил, что эти идентификаторы документов хранятся в профиле пользователей для ссылки. Ваше объяснение относительно того, как mongo будет перебирать массив, полезно. Спасибо Matt – meteorBuzz

+1

, а вместо сохранения идентификаторов в профиле пользователей подпишитесь на коллекцию документов. –