【问题标题】:mongoose-paginate sorting by referenced documentmongoose-paginate 按引用文档排序
【发布时间】:2016-01-08 15:56:58
【问题描述】:

我想使用 mongoose-paginate 和 NodeJS 按departure_countryname 对我的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.js mongodb mongoose pagination mongoose-plugins


【解决方案1】:

将国家代码设为 Country-Schema 的 _id 怎么样?

然后departure_country: {type: String, ref: 'Country'}

这实际上可能是一个更好的设计。 Country-Schemas _id 会很小,国家代码不应该有冲突。同样在GroupSchema 中,您将使用更少的空间来存储“外键”departure_country

那么您就可以按departure_country 进行排序,并且该排序也有可能对国家/地区名称有效。

【讨论】:

  • 有时我还需要显示甚至按国家/地区名称排序
  • @molerat 认为没有办法做到这一点,因为您正在填充。你必须在 nodejs 端这样做。 underscorejs.org 有很好的功能。 sortBy 甚至 groupBy 可能会有用。
  • 如果你得到 10000 个条目中的 50 个并且只对它们进行排序,你将不会得到与排序 10000 然后选择 50 个相同的结果。
  • 这是 mongo 中数据规范化的结果。回到我的建议,我认为如果您使用国家名称作为 ID,它甚至可以工作。如果您有一组预定义的国家/地区 - 所以它们不是用户输入(如果它们是用户输入,您需要一种方法来规范化名称字符串以避免重复)。您还可以将出发国家/地区设为对象,并在其中同时包含 id 和国家/地区名称。
猜你喜欢
  • 2020-08-07
  • 2020-11-29
  • 2013-04-18
  • 1970-01-01
  • 2016-09-15
  • 2019-10-09
  • 2019-10-27
  • 2017-03-23
  • 2020-01-31
相关资源
最近更新 更多