我试图通过填充的字段对填充的文档进行排序,类似于mongoose文档中的示例:

http://mongoosejs.com/docs/api.html#query_Query-populate

其中Kitten通过objectId引用所有者,并且可以按所有者名称对Kitten上的查询进行排序 . 我尝试了很多语法变体,例如从中给出的答案

How to sort a populated document in find request?

虽然所有这些都填充并且不会抛出任何错误,但sort选项对我不起作用 . 我还没有尝试过的解决方案在这里给出:

Mongoose, sort based on foreign/populated key

但是没有使用来自mongoose的填充功能,感觉就像一个解决方案 . 也许一双新鲜的眼睛可以指出我的问题 .

我的模特(学期和学期参考):

var semesterSchema = mongoose.Schema({
  year: Number,
  season: {
type: String,
enum: ["FALL", "SPRING", "SUMMER"]
  }
});

var semesterReferenceSchema = mongoose.Schema({
  name: String,
  semester: {type: mongoose.Schema.Types.ObjectId, ref:"Semester"}
});

使用此代码查询时的结果

schema.SemesterReference.find().populate({path: "semester", options: {sort: {"year": 1}}}).exec().then(function(result){
console.log(result);
})

[ { _id: 5b2bb2312731613ba06b0e8f,
name: 'ZZZ',
semester:
 { _id: 5b23bd1e0ffe9a29d02ee02c,
   year: 2019,
   season: 'SPRING',
   __v: 0 },
__v: 0 },
{ _id: 5b2bb24b3c19bd1f3c1b0d66,
name: 'AAA',
semester:
 { _id: 5b23bd1e0ffe9a29d02ee011,
   year: 2010,
   season: 'SPRING',
   __v: 0 },
__v: 0 } ]

该查询返回相同的结果,就像我没有在选项中指定按年份排序一样 . 我在学期或学年期间尝试过相同的查询而没有引号,这也不起作用 . 令人担忧的是,将上面的查询中的“year”更改为与学期属性(例如asdf)不匹配的字符串不会抛出任何错误,并且查询将恢复正常,这似乎表明正在忽略sort选项 .

我在版本5.1.6的mongoose和3.6.0的mongodb .