使用Node.js在MongoDB中设置集合数组

时间:2017-03-21 17:34:35

标签: javascript node.js mongodb

我正在创建一个游戏,作为名为Game的集合的一部分,我试图标记它的一个元素。有问题的元素应该是来自另一个集合的userNames数组。我似乎无法弄清楚如何访问它。以下是我在游戏集中的内容:

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var ObjectId = schema.ObjectId;

module.exports.Game = mongoose.model('Game', new schema({
    id:             ObjectId,
    gameRoomName:   { type: String, required: '{PATH} is required.' },
    players:        {    }
}));

用户集合:

var mongoose = require('mongoose');
var schema = mongoose.Schema;

module.exports.users = mongoose.model('Users', new schema({
    userName:       {type: String, required: '{PATH} is required.'}
}));

基本上,游戏的用户名将保存在用户架构中。然后,我想访问它并将其插入到玩家空间中的Game模式中。我想象它是{type:collection.users}之类的东西,然而,似乎并没有这样做。

2 个答案:

答案 0 :(得分:0)

您可以将players存储为Users模型

的引用数组
module.exports.Game = mongoose.model('Game', new schema({
        .
        .
    players: [{type: Schema.Types.ObjectId, ref: 'Users'}],
)}

稍后访问:

Game.find()
    // filter 'players' field
    .select('players')
    // populate players with only 'username' field
    .populate('players', 'username')
    .exec(function(err, username) {
        // anything with players
    });  

长篇故事。完成article

后你会很高兴

答案 1 :(得分:0)

有几种方法可以解决这种情况......但最终我认为这取决于您希望将用户添加到游戏对象中时可用的数据以及您希望如何检索数据当你需要的时候。

如果您拥有所有缓存的用户名,无论是作为对象还是仅仅是用户名本身,将它们添加到游戏对象中会更有效。

示例:

var usernamesExample = ["Mike", "Ike", "Clara", "Joe"];

Game.findById(gameIdExample, function(error, foundGame){
  // handle errors/checks/etc.

  foundGame.players = usernamesExample;
  foundGame.save();
})

我个人认为这种方法是最好的表现。然后它可能对你的情况不起作用,在这种情况下我需要进一步澄清你如何获得游戏的用户名数据。