I am really struggling with building a REST api with the data I have below, everything works fine on the client side but when I need to make POST requests to update players
I cannot figure out how to query mongodb.
The route
router.get('/api/teams/:teamid/player/:playerid', player.getById);
The mongodb query
module.exports = {
getById: function(req, res) {
models.Team.findOne({"players.player_name":"Jokim"}, function(err, player) {
if (err) {
res.json({error: 'player not found.'});
} else {
console.log(player);
res.json(player);
}
});
}
};
The Json data
[
{
"__v":0,
"_id":"5362dcf7e99615aa392d7d72",
"assists":80,
"blocks":14,
"feed":null,
"fouls":20,
"made_one":10,
"made_three":5,
"made_two":15,
"missed_one":4,
"missed_three":4,
"missed_two":20,
"percentage":50,
"points":44,
"rebounds":100,
"steals":33,
"team_name":"Bulls",
"players":[
{
"player_name":"Jokim",
"_id":"5365f079ed4914600d9342c7",
"team_name":"",
"team_id":"",
"points":0,
"made_one":0,
"made_two":0,
"made_three":0,
"missed_one":0,
"missed_two":0,
"missed_three":0,
"percentage":0,
"assists":0,
"rebounds":0,
"steals":0,
"blocks":0,
"fouls":0,
"feed":""
},
{
"player_name":"Taj",
"_id":"5365f079ed4914600d9342c6",
"team_name":"",
"team_id":"",
"points":0,
"made_one":0,
"made_two":0,
"made_three":0,
"missed_one":0,
"missed_two":0,
"missed_three":0,
"percentage":0,
"assists":0,
"rebounds":0,
"steals":0,
"blocks":0,
"fouls":0,
"feed":""
}
]
},
{
"team_name":"Wizards",
"points":44,
"made_one":10,
"made_two":15,
"made_three":5,
"missed_one":4,
"missed_two":20,
"missed_three":4,
"percentage":50,
"assists":80,
"rebounds":100,
"steals":33,
"blocks":14,
"fouls":20,
"feed":null,
"_id":"5362dcf7e99615aa392d7d75",
"__v":0,
"players":[
{
"player_name":"John Wall",
"points":22,
"made_one":3,
"made_two":4,
"made_three":5,
"missed_one":2,
"missed_two":3,
"missed_three":4,
"percentage":5,
"assists":2,
"rebounds":2,
"steals":2,
"blocks":5,
"fouls":3,
"feed":null,
"facebook_id":null,
"_id":"5362dcf7e99615aa392d7d77"
},
{
"player_name":"Bradley Beal",
"points":22,
"made_one":3,
"made_two":4,
"made_three":5,
"missed_one":2,
"missed_two":3,
"missed_three":4,
"percentage":5,
"assists":2,
"rebounds":2,
"steals":2,
"blocks":5,
"fouls":3,
"feed":null,
"facebook_id":null,
"_id":"5362dcf7e99615aa392d7d76"
}
]
}
]
As you are trying to search within players array I think you will have to use elemMatch:
Please find the docs related to the same: http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/
PS: I have not tried this as I do not have NodeJS with Mongo on my system now.
Usually people are using PUT
method to update model.
Check the update method in mongodb docs.
Route
router.put('/api/teams/:teamid/player/:playerid', player.updatePlayer);
Controller
module.exports = {
updatePlayer: function(req, res) {
models.Team.update({"players.player_name":"Jokim"}, {$set: {assist: 100}}, function(err, player) {
if (err) {
res.json({error: err});
} else {
console.log(player);
res.json(player);
}
});
}
};
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.