【问题标题】:Populate and sort issue填充和排序问题
【发布时间】:2016-10-28 12:53:27
【问题描述】:

我对 Mongoose 查询有一个小问题。我正在尝试使用其他两个引用集合(员工和班次类型)填充班次集合。

一切正常,问题是当我尝试按"employee.lastName" 键排序时。

这是我的代码:

Shift
  .find()
  .populate("employee", "-_id lastName firstName userID")
  .populate("shift", "-_id shiftID")
  .select("employee date shift")
  .sort({ "employee.lastName": 1, "date": 1 })
  .exec(function(err, shifts) {
    res.status(200).json(shifts);
  });

这是一个单一的结果:

{
  "_id": "5811b23d7b32ae2b59ce5890",
  "shift": {
    "shiftID": "MO123"
  },
  "date": "2016-10-10T00:00:00.000Z",
  "employee": {
    "firstName": "JOE",
    "lastName": "AVERAGE",
    "userID": "AJ456"
  }
},

我无法按"employee.lastName" 键对我的结果进行排序,只是它没有按预期工作。

有人知道吗?

【问题讨论】:

  • 您能否更准确地了解结果?并尝试将 json 扁平化,将 firstname lastname 和 userid 放在员工字段之外,看看它是否有效
  • 我不能将名字和姓氏放在员工之外,因为它们是来自另一个集合的字段,由于员工而附加到结果,即员工对象 id-

标签: node.js mongodb mongoose


【解决方案1】:

您不能对填充字段对象进行排序。请在填充时对其进行排序

Shift
  .find()
  .populate("employee", "-_id lastName firstName userID", null, { sort: { 'lastName': 1 } })
  .populate("shift", "-_id shiftID")
  .select("employee date shift")
  .sort({"date": 1 })
  .exec(function(err, shifts) {
    res.status(200).json(shifts);
  });

【讨论】:

  • 谢谢,但这不起作用。如果每个班次都有多名员工,这将尝试按姓氏对单个班次中的每个员工进行排序,但事实并非如此。我有一班员工,所以我需要按姓氏排序,而不是在员工对象中,而是在它之外
  • var ParticipantSchema = 新架构({
  • 我认为您应该使用员工数据定义 Shift Schema 以进行排序:var ShiftSchema = new Schema ({ ...... employee: { _id : false, firstName : { type: String, trim: true }, lastName : { type: String, trim: true }, }, ...... })
猜你喜欢
  • 2013-08-16
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2011-03-28
  • 2020-05-29
  • 2012-04-26
相关资源
最近更新 更多