什么是使用nodejs的Mongoose查找查询?

时间:2016-10-12 09:15:15

标签: node.js mongodb

这是我的玩家模型

var mongoose = require('mongoose'),Schema = mongoose.Schema;  
var playerSchema = Schema({  
  name: String,
  password: String,
  country: String
});
mongoose.model('players', playerSchema);

这是我的国家模型

var mongoose = require('mongoose'),Schema = mongoose.Schema;  
var countrySchema = Schema({  
  name: String,
  isActive: Boolean
});
mongoose.model('countries', countrySchema);

这是app.js

mongoose.model('players').find({}, function (err, players) {
            console.log(players);
              if (err) {
                  return console.error(err);
              } else {
                  res.format({
                      html: function(){
                        res.render('players/index', {
                              title: 'Players List',
                              "players" : players
                          });
                    },
                    json: function(){
                        res.json(players);
                    }
                });
              }
        });

在玩家模型中我有countryId,在国家模型中我有相应的countryName。现在我想找到国家名称相同的find()查询的玩家。

2 个答案:

答案 0 :(得分:2)

您可以使用mongoose 填充方法

请参阅此链接:mongoose populate

在你的例子中,它是这样的:

mongoose.model('players').find().populate('country').exec(function(err,players){

});

这将为您提供countryID和Name

的结果

答案 1 :(得分:0)

mongodb是nosql-database,而不是像mysql / postgre这样的关系数据库。因此,对数据建模不像关系数据库,您可以在其中创建一个连接两个表的查询(在mongodb中,“表”称为集合)。

在MongoDB和您当前的架构中,您首先需要找到所需国家/地区的countryId。然后找到那个国家的球员。

替代品;

  1. 您可以将countryName直接存储在播放器集合
  2. 您可以将playerId存储在国家/地区集合中的数组中
  3. 此外,在您的playerSchema中,country应该是ObjectId,而不是String