【问题标题】:Mongoose populate not returning any results猫鼬填充不返回任何结果
【发布时间】:2018-05-03 20:21:43
【问题描述】:

我在这里看到了一些与此类似的问题,但似乎没有一个解决方案有效。我正在为我的婚礼创建一个餐桌规划器,并且我正在尝试执行查询以返回所有餐桌(顶级餐桌、第一桌、第二桌等)以及分配给这些餐桌的客人列表。我有以下架构:

const guestSchema = new mongoose.Schema({
  firstname: {
    type: String,
    required: 'Please provide the first name of the guest',
    trim: true
  },
  surname: {
    type: String,
    required: 'Please provide the surname of the guest',
    trim: true
  },
  attending: {
    type: String,
    default: 'Awaiting RSVP'
  },
  menu: {
    type: String,
    default: 'Awaiting RSVP'
  },
  allergies: {
    type: String,
    default: 'Awaiting RSVP'
  },
  table: [{
    type: mongoose.Schema.ObjectId,
    ref: 'Table',
  }]
});


const tableSchema = new mongoose.Schema({
  name: {
    type: String,
    required: 'Please provide the name of the table',
    trim: true
  },
  capacity: {
    type: Number,
    required: 'Please provide the capacity of the table',
  },
  guests: [{
    type: mongoose.Schema.ObjectId,
    ref: 'Guest',
  }]
});

在我的 guestController.js 中,我设置了一个 API 端点,如下所示:

exports.getTableGuests = async (req, res) => {
  const guests = await Table.find().populate({path: 'guests', select: 'firstname surname', model: 'Guest'});
  res.json(guests);
};

这里的客人是表模型中的外部字段的名称。在返回的 JSON 中,我确实得到了一个 guest 数组,但它是空的。

有什么想法吗?

【问题讨论】:

  • 嗨詹姆斯豪厄尔;您能否粘贴数据库中的表格和客人记录示例,以确认您正在查询的数据类型?
  • 当然我已经从 MongoDB Compass 添加了屏幕截图
  • 实际上,屏幕截图并不理想。对他们的建议是图片在帖子中很有用,但确保帖子在没有它们的情况下仍然清晰。因此,与其显示数据的屏幕截图,不如直接将实际的 json 复制并粘贴到问题中。 cfmeta.stackoverflow.com/questions/303812/…
  • 好酷很快就会上传数据。刚刚发现问题的可能原因,所以我先尝试修复。

标签: mongodb mongoose


【解决方案1】:

使用mongoose.Schema.Types.ObjectId 代替mongoose.Schema.ObjectId。这样就可以解决问题了。

【讨论】:

  • 很遗憾没有。我已经尝试过了,因为它是另一个问题的解决方案。
【解决方案2】:

好的,我自己发现了问题。问题是我有一个 load-data.js 脚本,我正在运行该脚本以从 JSON 文件加载来宾和表。表的 JSON 数据包含加载时当前在数据库中的来宾的来宾 ID。但是当脚本运行时,它会删除所有客人并为他们生成新的 ID,因此 ID 与表集合中的 ID 不匹配。

为了解决这个问题,我将客人和桌子的加载分开,以便我可以手动添加正确的 ID。我现在将在我的应用程序中创建一个界面来创建这些关系以消除手动过程。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2014-05-30
    • 2020-07-25
    相关资源
    最近更新 更多