Arrays MongoDb子文档数组填充(通过Mongoose ORM):在调用填充时是否保持数组顺序

Arrays MongoDb子文档数组填充(通过Mongoose ORM):在调用填充时是否保持数组顺序,arrays,mongodb,mongoose,subdocument,mongoose-populate,Arrays,Mongodb,Mongoose,Subdocument,Mongoose Populate,假设我在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 = mo

假设我在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);
        });
    }
});
数组中元素的顺序是否保持不变?这里的目标是允许用户维护其电影的播放列表顺序。如果当populate方法激发时,电影对象ID的数组顺序没有得到维护,那么这将不符合我的目的。因此我想我会问一个在这方面更有知识的人

如果这样做有效,那么我还有另一个任务,即允许用户更改播放列表中电影的顺序,这应该是通过允许在阵列中交换电影对象id索引来实现的


提前感谢您的帮助。

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

您可以查看等级库以供参考,该等级库突出显示数组必须包含键的整数值,并以升序数字顺序进行维护


此外,Mongoose在数组上的填充通过在数组的每个元素上调用Model.populate来工作。这将在适当的位置修改数组,因此保留顺序。您可以查看相关的源代码。

Thx。问题是-mongoose填充方法是否保持原始数组顺序。但是我和一个朋友核实了一下,他给了我这个链接,指向猫鼬的填充代码。他还给了我一个指向堆栈溢出的链接,$in不能保证数组元素的顺序。然而,阅读github源页面上的代码——我可以看到维护项目顺序的提示——请参见第2298到2317行。有人能证实吗