2011-10-16 5 views
0
Phone.find {number : "12345678"}, (err,phone) -> 
      phone.forEach (item, i) -> 
       console.log item 
       console.log item.subdomain 
       console.log item.subdomain_id 
       console.log item.city 

retours:Node.js: document renvoyant undefined - Mongoose

{ _id: 4e9b614e01c642c2be000002, 
    city: 'San Francisco', 
    country: 'US', 
    indicative: '234', 
    number: '12345678', 
    subdomain_id: 4e9b532b01c642bf4a000003 } 

undefined 
undefined 
San Francisco 

Pourquoi le item.subdomain_id si ce renvoyant undefined est dans le document?

Edit:

J'ajouté subdomain_id au schéma et il fonctionne maintenant (item.subdomain_id), cependant, je ne reçois pas le document sous-domaine, seul l'ID. Je veux obtenir item.subdomain et être en mesure d'appeler des méthodes à ce sujet.

Merci

+0

Est-ce entré correctement? _id et subdomain_id ne sont pas valides json - ils ne sont ni String ni Number. – wombleton

Répondre

0

Si vous stockez un ObjectID, pas de documents intégrés, vous devez utiliser la fonction populate() pour saisir les objets référencés:

Phone.find({number : "12345678"}).populate('subdomain_id').run (err, phones) -> 
    for phone in phones 
    console.log phone 

http://mongoosejs.com/docs/populate.html

0

donc je viens de chercher une réponse à la même question. Ce que je faisais était en utilisant la recherche de Mongoose (via l'héritage d'objet), afin d'utiliser une requête de recherche de json.

Ce qu'il ressemblait à c'était:

User.find({email:req.body.email}).exec(function(err,user){ 
    console.log(user.email); 
} 

Ce que j'oublié et n'avais pas pensé est que l'objet de retour sera un tableau. En effet, votre requête de recherche peut facilement et souvent inclure plusieurs objets. En raison de cela, vous devrez soit d'énumérer vos résultats, ou si votre demande ne devrait findOne (et nous n'avons pas utilisé findOne), vous pouvez simplement appeler objet 0 comme ceci:

User.find({email:req.body.email}).exec(function(err,user){ 
    console.log(user[0].email); 
} 

J'espère cela aide, laissez-nous savoir si vous avez encore des problèmes.

Questions connexes