0

ホームチームの名前だけをページに出力して、自分のコードをより適切に操作する方法を理解しようとしています。1 つのチームのみをページに印刷し、そのチームのすべての詳細をページに印刷していますが、私は 1 つの部分だけを印刷したいと考えています。

これは私のコードです。それぞれの名前をhometeamページに出力したい

  app.get('/home', function(req, res) {
    Match.findOne({}).populate('hometeam.name').exec(function(err, teams){
      util.log(teams);
      res.send(teams);
    });
  });

しかし、ページをロードすると、この一致リストの最初のデータしか取得できません

[
  {
    "hometeam": "5106e7ef9afe3a430e000007",
    "_id": "5113b7ca71ec596125000005",
    "__v": 0,
    "key": 1360246730427
  },
  {
    "hometeam": "5113c13e0eea687b28000001",
    "_id": "5113e951354fe70330000001",
    "__v": 0,
    "key": 1360259409361
  },
  {
    "hometeam": "5113c13e0eea687b28000001",
    "_id": "5113e999354fe70330000002",
    "__v": 0,
    "key": 1360259481412
  }
]

また、入れようとするとutil.log(teams.hometeam.name)、次のようになります。

TypeError: Cannot call method 'toString' of undefined

しかし、ここでホームチームに属する名前を印刷できるようにしたいと思います。hometeam はデータベース内の Team の objectId にすぎないため、ここで DBreferencing に何か不足していますか?

アップデート:

チーム スキーマ

var Team = new Schema({
  'key' : {
    unique : true,
    type : Number,
    default: getId
  },
  'name' : { type : String,
              validate : [validatePresenceOf, 'Team name is required'],
              index : { unique : true }
            }
});

module.exports.Schema = Team;
module.exports.Model = mongoose.model('Team', Team);

一致スキーマ

var Team = require('../schemas/Team').Schema;

var Match = new Schema({
  'key' : {
    unique: true,
    type: Number,
    default: getId
  },
  'hometeam' : { type: Schema.ObjectId, ref: 'Team' },
  'awayteam' : { type: Schema.ObjectId, ref: 'Team' }
});

module.exports = mongoose.model('Match', Match);
4

1 に答える 1

0

Populateは、取得しようとしているプロパティのプロパティ名を取得します。これは、「hometeam.name」の代わりに「hometeam」を使用する必要があることを意味します。ただし、チームの名前を取得して、それをフィルタリングできるようにする必要があります。その後、呼び出しはになります。

Match.findOne({}).populate('hometeam', {name: 1}).exec(function(err, teams)

これで、その名前に「hometeam」という名前のプロパティができました。楽しむ :)

編集

スキーマを正しく登録するために、より多くのファイルに単一のマングースインスタンスを含める方法を示します。

app.js

var mongoose = require('mongoose');
var Team = require('./schemas/team-schema')(mongoose);
var Match = require('./schemas/match-schema')(mongoose);
// You can only require them like this ONCE, afterwards FETCH them.
var Team = mongoose.model('Team'); // LIKE THIS

schemas / match-schema.js

module.exports = function(mongoose) {
    var Match = new mongoose.Schema({
        'key' : {
            unique: true,
            type: Number,
            default: getId
        },
        'hometeam' : { type: mongoose.Schema.ObjectId, ref: 'Team' },
        'awayteam' : { type: mongoose.Schema.ObjectId, ref: 'Team' }
    });
    return mongoose.model('Match', Match);
};

schemas / team-schema.js

module.exports = function(mongoose) {
    var Team = new mongoose.Schema({
        'key' : {
            unique : true,
            type : Number,
            default: getId
        },
        'name' : { type : String,
            validate : [validatePresenceOf, 'Team name is required'],
            index : { unique : true }
        }
    });
    return mongoose.model('Team', Team);
};
于 2013-02-07T18:17:02.390 に答える