私のMongoデータベースを照会しているNode APIがあります。ノードAPIクエリの一部のドキュメントを返すMongo
コレクション内のすべてのドキュメントを返すことができます。さて、私は部分的な書類を返却したい。
私のモデル(すなわちPlayer.js)は次のようになります。私は選手たちのコレクション内のすべての文書を照会したい
//...
app.get('/api/players',function(req,res){
Player.getPlayers(function(err,players){
if(err){
throw err;
}
res.json(players);
});
});
//...
が、リターン:
var mongoose = require('mongoose');
// Create schema for players
var playerSchema = mongoose.Schema(
{
player_name:String,
goals:Number,
clubs:
{
club_name:String,
season:String
}
}
);
var Player = module.exports = mongoose.model('Player',playerSchema);
// get all players
module.exports.getPlayers = function(callback, limit){
Player.find(callback).limit(limit);
};
私のアプリケーションは、このようになります。私が ".../api/players/player_names"に行くときのplayer_nameのみ
私は以下のコードを追加することはうまくいくと思っていましたが、そうではありません...
私のapp.js上// [previous code]
// get all player names
module.exports.getPlayerNames = function(callback,limit){
Player.find(callback,player_name:1).limit(limit)
}
これを:私のモデルに
この
var mongoose = require('mongoose');
// Create schema for players
var playerSchema = mongoose.Schema(
{
player_name:String,
goals:Number,
clubs:
{
club_name:String,
season:String
}
}
);
//Its most common to pass the callback last, as this is what others do
playerSchema.statics.getPlayers = function(limit, callback){
this.find({})
.select('player_name')
.limit(limit)
.exec(callback);
};
module.exports = mongoose.model('Player',playerSchema);
が返されます:
//...
app.get('api/players/player_names',function(req,res){
Player.getPlayerNames(function(err,players){
if(err){
throw err;
}
res.json(players);
});
});
//...
'Player.find:あなたはプレイヤー名の配列だけ返すようにしたい場合は
(コールバック、PLAYER_NAME:1)' 'Player.findのようなもの(コールバック、{PLAYER_NAMEあるべき文法的に間違っています:1}) 'さらに、クエリ、セレクタ、コールバックを最後に渡す必要があります。つまり、 'select()'をクエリに連鎖させてから、コールバックを渡す 'exec()'を呼び出すことができます。 – tsturzl
さらに、このモデルにメソッドを追加する場合は、モデルを定義する前にスキーマで静的メソッドを使用する必要があります。例えば。 'playerSchema.statics.getPlayerNames = function ...'そして 'this'を使ってモデルにアクセスします。 'this.find(...) ' – tsturzl
申し訳ありません、私はNode&Mongoの新機能です。Player.find(コールバック、{player_name:1})の変更を行い、ドキュメント全体を返します。 – Victor