【发布时间】:2014-11-05 01:38:31
【问题描述】:
尝试在我的架构中填充 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);
});
};
【问题讨论】:
-
你能举个例子说明你是如何保存你的游戏对象的吗,这应该可以工作,只是在我的测试应用程序中尝试了相同的结构,它工作正常。
-
@materik 编辑了我如何将管理员添加到游戏中的代码。当我从 API 获取游戏文档时,所有数据都是正确的,我可以看到管理员 ID 保存在数组中。如果我回答了你的问题,请告诉我。
-
嗯.. 是的,看起来不错。你运行的是什么版本的mongodb。我不知道这是否会有所不同,但我记得在升级版本之前我遇到了填充问题。
-
@materik 我使用的是 2.6.0 版本,所以我 brew 升级到了 2.6.4,但起初并没有解决问题。但是,我查看了更多 mongoose 文档并使其正常工作,我将发布在答案中找到的解决方案。感谢您的帮助!
标签: mongodb mongoose mongoose-populate