繁星淼淼
如果你不想用aggregate,另一个解决方案是使用find然后使用array#sort:如果$in值是与数字类似的原始类型,您可以使用如下方法:var ids = [4, 2, 8, 1, 9, 3, 5, 6];MyModel.find({ _id: { $in: ids } }).exec(function(err, docs) {
docs.sort(function(a, b) {
// Sort docs by the order of their _id values in ids.
return ids.indexOf(a._id) - ids.indexOf(b._id);
});});如果$in值是非原始类型,如ObjectId,则需要另一种方法,如indexOf在这种情况下通过引用进行比较。如果使用Node.js4.x+,可以使用Array#findIndex和ObjectID#equals若要通过更改sort职能:docs.sort((a, b) => ids.findIndex(id => a._id.equals(id)) -
ids.findIndex(id => b._id.equals(id)));或使用任何Node.js版本,并带有下划线/存档findIndex:docs.sort(function (a, b) {
return _.findIndex(ids, function (id) { return a._id.equals(id); }) -
_.findIndex(ids, function (id) { return b._id.equals(id); });});