0

假设我在 Mongoose 中有 2 个 Schema,如下所示:

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);
        });
    }
});

数组中元素的顺序会保持不变吗?这里的目标是允许用户维护他们电影的播放列表顺序。如果在“填充”方法触发时,电影对象 ID 的数组顺序没有得到维护,那么这将不符合我的目的。因此,我想我会问在这方面知识更丰富的人。

如果这可行,那么我还有另一个任务是允许用户更改播放列表中电影的顺序,这应该是直接的,允许在数组中交换电影对象 id 索引。

提前感谢您的帮助。

4

1 回答 1

0

MongoDB 将保持数组的顺序,就像任何编程语言中的数组一样。

您可以查看BSON/JSON规范以供参考,其中强调数组必须包含键的整数值,并按数字升序进行维护。

此外,数组上的 Mongoosepopulate通过调用数组的Model.populate每个forEach元素来工作。这会修改数组,因此保留顺序。你可以在这里看到相关的源代码。

于 2015-09-03T07:29:45.770 回答