2013-01-28 5 views
0

Mon objet est comme,MongoDB interroger des objets imbriqués

{ 
    "Team-A": { 
     "captain": "A", 
     "homeGround": "some ground", 
     "winLoss": "12-4-0" 
    }, 
    "Team-B": { 
     "captain": "B", 
     "homeGround": "some ground 2", 
     "winLoss": "4-4-4" 
    } 
} 

Je dois montrer ces informations,

<h1>Team-A</h1> 
<h2>some ground</h2> 
<h3>12-4-0</h3> 

<h1>Team-B</h1> 
<h2>some ground2</h2> 
<h3>4-4-4</h3> 

NodeJS:

MongoClient.connect("mongodb://localhost:27017/MY_DB_TEST", function(err, db) { 
     if(!err) { 
     console.log("We are connected");   

     var collection = db.collection('football_teams');  
     var stream = collection.find().stream(); 

     stream.on("data", function(item){ 
      console.log(item); 
      res.render('index', {obj: item }); 
     });  
     } 
    }); 

Jade:

h1= obj.captain 
h2= obj.homeGround 
h3= obj.winLoss 

Ma sortie de la console est:

{ _id: 51064fa1e0d5d118b4b29aa0, 
    'Team-A': { 
     'captain": 'A', 
     'homeGround": 'some ground', 
     'winLoss': '12-4-0' 
    } } 

title is not defined 
    at eval (eval at <anonymous> (C:\node_modules\jade\lib\jade.js:176:8)) 
    at exports.compile (C:\node_modules\jade\lib\jade.js:181:12) 
    at Object.exports.render (C:\node_modules\jade\lib\jade.js:216:14) 
    at View.exports.renderFile [as engine] (C:\node_modules\jade\lib\jade.js:243:13) 
    at View.render (C:\node_modules\express\lib\view.js:75:8) 
    at Function.app.render (C:\node_modules\express\lib\application.js:503:10) 
    at ServerResponse.res.render (C:\node_modules\express\lib\response.js:721:7) 
    at CursorStream.exports.index (C:\Users\HFR&D\Desktop\nodemongoexpress\routes\index.js:18:8) 
    at CursorStream.EventEmitter.emit (events.js:96:17) 
    at CursorStream._onNextObject (C:\Users\HFR&D\Desktop\nodemongoexpress\node_modules\mongodb\lib\mongodb\cursorstream 

Je ne comprends pas comment je devrais boucle à travers mon objet et obtenir les valeurs de l'équipe-A/Team-B et leurs coordonnées respectives. Comment puis-je y parvenir en utilisant nodejs et jade.

MISE À JOUR:

disent qu'il ya 20 équipes, ma volonté de collection se compose de 20 documents. Ce que je veux faire, c'est faire une boucle dans ma collection et afficher des informations dans les 20 documents comme décrit ci-dessus.

  • Ma structure db est-elle correcte? Dois-je avoir un document différent pour chaque équipe? Si oui, comment obtenir le titre des documents (équipe-A, équipe-B) dynamiquement pendant le rendu en jade?

+0

Pouvez-vous afficher l'ensemble du modèle jade d'index? – gmaliar

+0

@Guy C'est tout ce qu'il ya, il y a une instruction 'extends extends' qui étend ma 'page maître'. Je suis très nouveau sur mongo/node/jade, donc je ne sais pas comment interroger le db pour obtenir les valeurs 'Team-A' et ses détails. C'est ce que je veux savoir –

+1

Vous devez retravailler votre schéma pour que chaque équipe ait son propre document avec un champ 'name' identifiant le nom de l'équipe. – JohnnyHK

Répondre

0

Vous ne recevez pas l'équipe-Une collection comme vous le voyez dans votre console.log

{ _id: 51064fa1e0d5d118b4b29aa0, 
    'Team-A': { 
     'captain": 'A', 
     'homeGround": 'some ground', 
     'winLoss': '12-4-0' 
    } } 

L'erreur que vous obtenez est title is not defined, donc je devine quelque chose d'autre fracassera votre code. (Peut-être la variable de titre pour la mise en page n'est pas réglé?)

Après avoir corrigé ce problème ne aimez donc

h1= obj['Team-A'].captain 
h2= obj['Team-A'].homeGround 
h3= obj['Team-A'].winLoss 

Cela vous donnera les données.

+0

Est-il possible d'obtenir le 'Team-A' dynamiquement? puisque c'est le nom de mon document. J'ai mis à jour ma question s'il vous plaît jeter un oeil –

+0

Vous pouvez vérifier les clés d'objet et les faire correspondre à une expression régulière,/Team- [A | B] /, si elle le trouve il va retourner celui qu'il a trouvé, alors vous pouvez l'utiliser comme obj [WhatIFoundFromRegex] mais c'est un peu bête de le faire, j'écouterais @JohnnyHK et changerais le schéma de base de données. – gmaliar

0
var myobj = { 
"Team-A": { 
    "captain": "A", 
    "homeGround": "some ground", 
    "winLoss": "12-4-0" 
}, 
"Team-B": { 
    "captain": "B", 
    "homeGround": "some ground 2", 
    "winLoss": "4-4-4" 
} 
}; 

var key = Object.keys(obj)[0] // gives you the first key i.e. Team-A. its an array so every key is easily accessible. 
var captain = myobj[key].captain // gives 'A' 
var homeGround = myobj[key].homeGround // gives 'some ground' 
var winloss = myobj[key].winloss //gives "12-4-0"