尝试在我的架构中填充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);
});
};
答案 0 :(得分:0)
好吧,我回到了mongoose文档,并决定改变我通过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对象。
答案 1 :(得分:0)
要填充一个数组,你只需要在路径字段之后输入模型名称字段,如下所示:
Game.findById(req.params.id)
.populate({path: 'admins', model: 'AdminsModel'})
.exec(function(err, game){...});
它完美地适用于我的项目...