node.js - Mongoose 填充排序选项
问题描述
我正在尝试按填充字段对填充的文档进行排序,类似于猫鼬文档中的示例:
http://mongoosejs.com/docs/api.html#query_Query-populate
其中 Kitten 通过 objectId 引用所有者,并且对 Kitten 的查询可以按所有者名称排序。我已经尝试了许多语法变体,例如从给出的答案
虽然它们都填充并且不抛出任何错误,但排序选项对我不起作用。这里给出了我还没有尝试过的一种解决方案:
但不使用从 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 } ]
该查询返回的结果与我根本没有在选项中指定按年份排序一样。我在学期或一年左右尝试了相同的查询,但没有引号,这也不起作用。令人担忧的是,将上面查询中的“年份”更改为与学期属性不匹配的字符串(例如 asdf)不会引发任何错误,并且查询会正常返回,这似乎表明排序选项被忽略了。
我在 mongoose 5.1.6 版和 mongodb 3.6.0 版上。
解决方案
您的第一个两个来源都使用了一组参考文献。如您的第一个来源所述:
'sort' 适用于 Author 模型,而不是 Book 模型。
在您的示例中semesters
,您的semesterReferenceSchema
. 比您可以按年份对数组进行排序。
推荐阅读
- maven - 如何使用 Junit 项目并行运行 Cucumber Selenium Maven
- jsf - 如果我使用 ajax 调用提交 Primefaces widgetvar 函数将不起作用
- c# - ASP gridview 点击单元格事件
- android - 应用 dexguard 后 onClick() 不起作用。有没有办法解决这个问题?
- android - 自定义小部件 setVisibilty 方法不起作用?
- javascript - 如何通过订阅组件内的变量来存储可观察的值 - Angular4
- ios - 隐藏表格视图单元格并删除表格视图空间
- angularjs - Angular - Promise: how to synchronise functions
- c++ - 使用可变参数模板改变模板参数
- python - 如何使用turtle更改python onclick的背景颜色?