mongoose-paginate 按引用文档排序
Posted
技术标签:
【中文标题】mongoose-paginate 按引用文档排序【英文标题】:mongoose-paginate sorting by referenced document 【发布时间】:2016-01-08 15:56:58 【问题描述】:我想使用 mongoose-paginate 和 NodeJS 按departure_country
的name
对我的Group
-Model 进行排序。
我的组架构:
var GroupSchema = new Schema(
name: String,
flight_date: Date,
....
departure_country: type: Schema.ObjectId, ref: 'Country',
....
);
国家模式:
var CountrySchema = new Schema(
name: String,
code: String,
);
使用 mongoose-paginate 的sortBy
-选项按国家/地区的_ids
排序,我不知道如何告诉它按name
排序。
【问题讨论】:
如何申请sortBy
?
sortBy(departure_country: -1)
现在
你试过"departure_country.name": -1
吗?
为什么不能在GroupSchema
中包含国家名称?请参阅我之前的评论。
Node - Mongoose 3.6 - Sort query with populated field 的可能重复项。
【参考方案1】:
将国家代码设为 Country-Schema 的 _id 怎么样?
然后departure_country: type: String, ref: 'Country'
这实际上可能是一个更好的设计。 Country-Schema
s _id 会很小,国家代码不应该有冲突。同样在GroupSchema
中,您将使用更少的空间来存储“外键”departure_country
。
那么您就可以按departure_country
进行排序,并且该排序也有可能对国家/地区名称有效。
【讨论】:
有时我还需要显示甚至按国家/地区名称排序 @molerat 认为没有办法做到这一点,因为您正在填充。你必须在 nodejs 端这样做。 underscorejs.org 有很好的功能。 sortBy 甚至 groupBy 可能会有用。 如果你得到 10000 个条目中的 50 个并且只对它们进行排序,你将不会得到与排序 10000 然后选择 50 个相同的结果。 这是 mongo 中数据规范化的结果。回到我的建议,我认为如果您使用国家名称作为 ID,它甚至可以工作。如果您有一组预定义的国家/地区 - 所以它们不是用户输入(如果它们是用户输入,您需要一种方法来规范化名称字符串以避免重复)。您还可以将出发国家/地区设为对象,并在其中同时包含 id 和国家/地区名称。以上是关于mongoose-paginate 按引用文档排序的主要内容,如果未能解决你的问题,请参考以下文章
mongoose-paginate 与 react 和 material-ui TablePagination - 单击 onChangePage 道具后第二页开始不呈现