Mongo / Mongoose查询结果中缺少字段

时间:2015-06-03 14:29:42

标签: node.js mongodb mongoose

我正在尝试将一个节点应用程序发布到我的Raspberrypi(我最接近专用服务器XD)我的一些朋友来测试我写的一个小网络应用程序,但由于某种原因,其中一个查询是当它在我的ide(云9)上时,在pi上没有正常工作。

这是架构:

var campaignSchema = new Schema({
    gameMaster: {
        type: Schema.Types.ObjectId,
        ref: "Users"
    },
    players: [{
       type: Schema.Types.ObjectId ,
      ref: "Users"
    }],
    name: String,
    gameSystem: String,
    subSystem: String
});

以下是查询:

db.Campaign.findOne({'_id' : req.params.campaign}, 'gameMaster players')
.exec(function(err, campaign){
    console.log(campaign);
});

结果是:

{ 
    _id: 556f09195865094845a0d522, 
    players: [] 
}

但是在mongo中执行db.campaigns.find({})会导致:

{ 
    "_id" : ObjectId("556f09195865094845a0d522"), 
    "gameMaster" : ObjectId("556d1daf4b9b697213468827"), 
    "gameSystem" : "Nwodv2", 
    "subSystem" : "Demon", 
    "name" : "Baltimore", 
    "players" : [ ], 
    "__v" : 0 
}

我觉得我必须遗漏一些东西......我不知道怎么解决这个问题,我在字段上没有限制器的情况下尝试了查询,但它仍然省略了gameMaster场...

编辑:此处请求创建Campaign对象

var campaign = new db.Campaign({
        gameMaster: userid,
        gameSystem: req.body.system,
        subSystem: req.body.subsystem,
        name: req.body.name
    });

为了进一步混淆,这个查询有效:

db.Campaign.findOne({'_id' : req.params.campaign}, 
    '_id name gameSystem subSystem gameMaster players') 
    .populate('gameMaster', '_id displayName')
    .populate('players', '_id displayName')
    .exec(function(err, campaign) {
      //gameMaster is valid here with the id and displayName populated...
    });

1 个答案:

答案 0 :(得分:1)

https://github.com/Automattic/mongoose/issues/3020

如果有其他人遇到此问题。我发现这个错误报告可以解释问题的原因,它与你如何安装新的mongoose 4有关。