Mongoose填充不返回任何结果

时间:2018-04-30 14:48:53

标签: mongodb mongoose

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



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',
  }]
});




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



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




其中,guest是Table模型中外部字段的名称。在返回的JSON中,我确实得到了一个来宾数组,但它是空的。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用mongoose.Schema.Types.ObjectId代替mongoose.Schema.ObjectId。这将解决问题。

答案 1 :(得分:0)

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

要解决此问题,我将guest虚拟机和表的加载分开,以便我可以手动添加正确的ID。我现在将在我的应用程序中创建一个界面来创建这些关系以删除手动过程。