2014-05-05 6 views
0

Je suis vraiment aux prises avec la construction d'une API REST avec les données que j'ai ci-dessous, tout fonctionne bien du côté client mais quand j'ai besoin de faire des requêtes POST pour mettre à jour players je n'arrive pas à comprendre comment interroger mongodb.Mongo db - Interroger un tableau imbriqué d'objets

La route

router.get('/api/teams/:teamid/player/:playerid', player.getById); 

La requête mongodb

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);  
      } 
     }); 
    } 
}; 

Les données Json

[ 
    { 
     "__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" 
     } 
     ] 
    } 
] 
+0

Quel est le problème? Une erreur? – Vinz243

+0

Pouvez-vous être plus précis? Quelle action voulez-vous faire? Je suppose que vous voulez créer un nouveau sous-document 'player' puisque vous créez une api de repos. – joao

Répondre

2

Comme vous essayez de Rechercher dans les tableau joueurs je pense que vous devrez utiliser elemMatch:

S'il vous plaît trouver les documents liés à la même: http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/

PS: Je ne l'ai pas essayé ce que je n'ai pas NodeJS avec Mongo sur mon système maintenant .

+0

Ouais ça sonne bien .. J'ai tripoté avec beaucoup de différentes façons je suis tombé sur cela, mais ça ne m'a pas fait du bien je ne l'ai pas utilisé correctement le plus probable .. Laissez-moi lire plus, je 1+ parce que je pense que c'est la bonne voie .. –

+0

OUI MERCI POUR CE LIEN BEAU :) –

+0

Voici la requête '{_id:" 5362dcf7e99615aa392d7d72 "}, {players: {$ elemMatch: {player_name:" Jokim "}}}' travaillé comme un charme :) –

-2

Habituellement, les gens utilisent la méthode PUT pour mettre à jour le modèle.
Vérifiez la méthode update dans les documents mongodb.

Route

router.put('/api/teams/:teamid/player/:playerid', player.updatePlayer); 

Contrôleur

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);  
     } 
    }); 
    } 
}; 
+0

Lol sérieusement? Je veux dire que j'essaie juste d'accéder au modèle en premier ... –

+0

Lors des tests, je ne veux pas avoir à lancer un POST chaque fois que je veux obtenir une réponse –