2015-09-02 8 views
0

Предположим, что у меня есть 2 схемы-х в Мангуста, которые выглядят так:MongoDb Заселите поддокумент массив (через Mongoose ОРМ): Поддерживает ли он заказ массива, когда Заселите называется

var movieSchema = mongoose.Schema({ 
    name: String, 
    type: String 
}); 

var moviePlaylistSchema = mongoose.Schema({ 
    name: String, 
    movies: [{type: mongoose.Schema.Types.ObjectId, ref: 'Movie'}] 

}); 

var Movie = mongoose.model('Movie', movieSchema); 
var MoviePlaylist = mongoose.model('MoviePlaylist', moviePlaylistSchema); 

Если запрос был сделан по следующим направлениям :

MoviePlaylist.find({}).populate('movies').exec(function(err, res) { 
    if (err) console.log('err', err); 
    else { 
     console.log('res', res); 
     res.forEach(function(elem, index) { 
      console.log('elem.name', elem.name); 
     }); 
    } 
}); 

Будет ли поддерживаться порядок элементов в массиве? Цель здесь заключается в том, чтобы позволить пользователю поддерживать порядок воспроизведения своих фильмов. Если при запуске метода «заполнить» порядок массивов идентификаторов объекта Movie не поддерживается, это не будет служить моей цели. Поэтому я подумал, что попрошу кого-то, кто более осведомлен в этой области.

Если это работает, у меня есть еще одна задача, которая позволяет пользователю изменять порядок воспроизведения фильмов в списке воспроизведения, который должен быть прямым, позволяя индексировать индекс объекта видеообъекта в массиве.

Спасибо за вашу помощь заранее.

ответ

0

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

Вы можете просмотреть спецификацию BSON/JSON для ссылки, в которой подчеркивается, что массив должен содержать целые значения для ключей и поддерживаться в порядке возрастания по порядку.

Дополнительно, Mongoose populate на массиве работает, вызывая Model.populate через forEach на каждый элемент массива. Это изменяет массив на месте, поэтому порядок сохраняется. Вы можете увидеть соответствующий исходный код here.

+0

Thx. Вопрос в том, поддерживает ли метод заполнения мангуста порядок необработанного массива. Однако я проверил с другом - и он дал мне эту ссылку на код заполнения мангуста. https://github.com/Automattic/mongoose/blob/master/lib/model.js#L2342. Он также дал мне ссылку на переполнение стека - что $ in не гарантирует порядок элементов массива - http://stackoverflow.com/questions/22797768/does-mongodbs-in-clause-guarantee-order. Однако, прочитав код на странице источника github - и я вижу подсказку о поддержании порядка элементов - см. Строку 2298 - 2317. Может кто-то проверить –

+0

см. Обновленный ответ – snozza