猫鼬填充不起作用

新手上路,请多包涵

您好,我有这个架构(称为 schema.js):

 var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var RoomSchema = new Schema({
  name: { type: String, required: true, index: { unique: true } },
  people: { type: Number, required: true },
  childrens: {type: Number, required: true},
  total: {type: Number, required: true}
});

var Room = mongoose.model('Room', RoomSchema);

var AvSchema = new Schema({
  roomId:  {type: Schema.Types.ObjectId, ref: 'Room'},
  people: { type: Number, required: true },
  childrens: {type: Number, required: true},
  total: {type: Number, required: true}
});

var Av = mongoose.model('Av', AvSchema);

module.exports = {
  Room: Room,
  Av: Av
};

在我的路线文件中:

 module.exports = function(app) {
  var model = require('../models/Schema');

  app.get('/api/rooms', function(req, res) {
    model.Room.find(function(err, rooms) {
      if (err)
        res.send(err);

      res.json(rooms);
    });
  });

  app.get('/api/av', function(req, res) {
    model.Av.find().populate('roomId').exec(function(err, av) {
      if (err)
        res.send(err);

      res.json(av);
    });
  });
};

db 的图片:在此处输入图像描述

GET /api/rooms - 响应:

 [{
  "_id": "5444d0dd9a31437167eea816",
  "name": "Single",
  "people": 1,
  "childrens": 1,
  "total": 4
}, {
  "_id": "5444d1009a31437167eea817",
  "name": "Double",
  "people": 2,
  "childrens": 2,
  "total": 10
}]

当我调用 api/rooms 时看起来不错,但是当我调用 api/av 时,我得到一个空数组 [] …。知道我做错了什么吗?我应该提一下,我已经在两个 roomID 的 av 集合中插入了记录

先感谢您。

原文由 Teodor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

默认情况下,Mongoose 将模型名称复数以得出集合的名称,因此 Mongoose 正在查找 avs 集合而不是 av

您可以通过将集合名称作为第三个参数传递给 model 来显式设置集合名称:

 var Av = mongoose.model('Av', AvSchema, 'av');

原文由 JohnnyHK 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有同样的问题,但没有一个答案对我有用。

我想在查询后填充文档。

这没有用:

 // IIFE for async/await
( async() => {

    var user = await User.findOne( { _id } );

    await user.populate( 'comments' ); // Doesn't work

} );

Mongoose 文档解释说,当调用 .populate() 时,如果没有回调,它将不会被执行。相反,您需要使用 .populate().execPopulate()

 // IIFE for async/await
( async() => {

    var user = await User.findOne( { _id } );

    await user.populate( 'comments' ).execPopulate(); // Works as expected

} );

原文由 Snowball 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题