0

スキーマ内に ObjectID の配列を設定しようとしています。私は同様の回答を見回しましたが、誰もが少し違ったやり方をしているようで、自分で解決策を見つけることができませんでした.

私のスキーマは次のようになります。

var GameSchema = new Schema({
  title: String,
  description: String,
  location: String,
  created_on: { type: Date, default: Date.now },
  active: { type: Boolean, default: true },
  accepting_players: { type: Boolean, default: true },
  players: [{
    type: Schema.Types.ObjectId,
    ref: 'User'
  }],
  admins: [{
    type: Schema.Types.ObjectId,
    ref: 'User'
  }]
});

これまでのところ、このように入力しようとしていましたが、明らかに機能していません

exports.getAdmins = function(req, res) {
  Game.findById(req.params.id)
  .populate('admins')
  .exec(function(err, game) {
    return res.json(200, game.admins);
  });
};

母集団に関する質問のリストに追加するのは嫌いですが、多くの質問を調べましたが、解決策が見つかりませんでした。どんな助けでも大歓迎です!

編集:ドキュメントに管理者を追加する方法は次のとおりです

// Add admin to game
exports.addAdmin = function(req, res) {
  Game.findByIdAndUpdate(
    req.params.id,
    { $push: { 'admins': req.params.user_id }},
    function(err, game) {
      if(err) { return handleError(res, err); }
      if(!game) { return res.send(404); }
      return res.json(200, game.admins);
    });
};
4

2 に答える 2

0

さて、マングースのドキュメントに戻って、ID でゲームを検索し、応答を入力する方法を変更することにしました。

今、私の作業関数は次のようになります。

// Returns admins in a game
exports.getAdmins = function(req, res) {
  Game.findById(req.params.id, function(err, game) {
    if(err) { return handleError(res, err); }
    if(!game) { return res.send(404); }
    Game.populate(game, { path: 'admins' }, function(err, game) {
      return res.json(200, game);
    });
  });
};

私が抱えていた問題は、.findById メソッドを使用して .populate 関数を直接呼び出そうとしていたことですが、mongoose のドキュメントで populate メソッドが機能するにはコールバック関数が必要であることがわかったため、それは機能しません。これで、User オブジェクトが返されました。

于 2014-09-12T17:57:39.287 に答える