猫鼬填充排序选项

时间:2018-06-21 14:39:39

标签: node.js mongodb mongoose populate mongoose-populate

我正尝试按填充字段对填充文档进行排序,类似于猫鼬文档中的示例:

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

小猫在这里通过objectId引用所有者,并且可以通过所有者名称对小猫进行查询。我尝试过多种语法变体,例如

中给出的答案。

How to sort a populated document in find request?

尽管它们全部填充并且没有引发任何错误,但是sort选项对我不起作用。这里没有给出我尚未尝试过的一种解决方案:

Mongoose, sort based on foreign/populated key

但是不使用猫鼬填充的可用功能,感觉像是在变通。也许有一双新鲜的眼睛可以指出我的问题。

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

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 } ]

该查询返回的结果与我根本没有在选项中指定按年份排序的结果相同。我已经尝试过在学期或学年前后都没有引号的相同查询,这也不起作用。令人担忧的是,将上面查询中的“年份”更改为与学期属性(例如asdf)不匹配的字符串不会引发任何错误,查询将正常返回,这似乎表明已忽略了排序选项。

我使用的是猫鼬5.1.6版和mongodb的3.6.0版。

1 个答案:

答案 0 :(得分:0)

首先,两个来源都使用了一个引用数组。如您的 first source中所述:

“排序”适用于作者模型,而不适用于图书模型。

在您的示例中,您的semesters中将需要一个semesterReferenceSchema数组。比您可以按年份对数组进行排序。