Mongoose Populate が動作しない 質問する

Mongoose Populate が動作しない 質問する

こんにちは。このスキーマ (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 を呼び出すと空の配列 [] が返されます.... 何が間違っているのかわかりますか? 両方の roomsID の av コレクションにレコードを挿入したことを述べておく必要があります。

よろしくお願いします。

ベストアンサー1

デフォルトでは、Mongoose はモデル名を複数形にしてコレクションの名前を作成するため、avsではなくコレクション内を検索しますav

コレクション名を 3 番目のパラメータとして渡すことで、明示的にコレクション名を設定できますmodel

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

おすすめ記事