【发布时间】:2016-08-31 12:37:52
【问题描述】:
我有一个 Node API 正在查询我的 Mongo 数据库。
我能够返回集合中的所有文档。现在,我想返回部分文档。
我的模型(即 Player.js)如下所示:
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);
};
我的应用程序如下所示:
//...
app.get('/api/players',function(req,res){
Player.getPlayers(function(err,players){
if(err){
throw err;
}
res.json(players);
});
});
//...
我想查询我的玩家集合中的所有文档,但当我转到“.../api/players/player_names”时只返回 player_name
我认为添加下面的代码会起作用,但它没有......
这在我的模型上:
// [previous code]
// get all player names
module.exports.getPlayerNames = function(callback,limit){
Player.find(callback,player_name:1).limit(limit)
}
这在我的 app.js 上:
//...
app.get('api/players/player_names',function(req,res){
Player.getPlayerNames(function(err,players){
if(err){
throw err;
}
res.json(players);
});
});
//...
【问题讨论】:
-
Player.find(callback,player_name:1)在语法上不正确应该类似于Player.find(callback,{player_name:1}),此外,您应该传递查询、选择器,然后最后传递回调。或者您可以将select()链接到查询上,然后调用exec()您将回调传递给它。 -
另外,如果你想在这个模型上添加方法,你应该在定义模型之前在模式上使用静态方法。例如。
playerSchema.statics.getPlayerNames = function...然后使用this访问模型,例如。this.find(...) -
对不起,我对 Node 和 Mongo 还很陌生...我做了您建议的更改 Player.find(callback,{player_name:1}) 并返回整个文档...跨度>