2016-10-12 4 views
1

これはこれは私の国のモデルnodejsを使用しているMongooseの検索クエリは何ですか?私はcountryIdを持っていると

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

である私の選手モデル

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

であり、これは、プレイヤーモデルで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); 
        } 
       }); 
       } 
     }); 

ある国モデルにおけるI対応するcountryNameを持つ。今度は、同じfind()クエリで国名のプレーヤーを探したいと思います。

+0

あなたの幸せを見つけるはずですこの質問を見てください:http://stackoverflow.com/questions/36805784/ how-to-join-two-collections-in-mongoose –

答えて

2

あなたは方法

を移入マングースを使用することができます。このリンクを参照してください:それはこのような何か、あなたの例ではmongoose populate

を:

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

}); 

これは、両方のcountryIDの結果あなたを与えるとします名前

+0

countryIdフィールドのみが表示されていますが、countryIdの結果はnullです。私は何をしますか? – Raj

+0

私は言及している記事を読んでください。あなたはスキーマを作成している間にあなたが入れたいrefフィールドを与えなければなりません – chirag

0

mongodbは、mysql/postgreのようなリレーショナルデータベースではなく、nosql-databaseです。したがって、データをモデリングすることは、リレーショナルデータベースとは異なります。ここでは、2つのテーブルを結合する1つのクエリを作成できます(mongodbでは "テーブル"はコレクションと呼ばれます)。

MongoDBと現在のスキーマでは、まずあなたが望む国のcountryIdを見つける必要があります。そして、その国を持っている選手を見つける。

代替手段;

  1. あなたが国のコレクション

内の配列にplayerId年代を保存することができますプレイヤーのコレクション

  • に直接COUNTRYNAMEを保存することができ、さらにもっと、あなたのplayerSchemaで、countryObjectIdする必要があります、Stringではありません。

  • 関連する問題