2011-08-11 5 views
32

Je le schéma ci-dessous (les excuses qu'il est en coffeescript)Comment utiliser mangouste findOne

Schema = mongoose.Schema 

AuthS = new Schema 
    auth: {type: String, unique: true} 
    nick: String 
    time: Date 
Auth = mongoose.model 'Auth', AuthS 

Je veux simplement récupérer un enregistrement qui est certainement dans ma base de données:

Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); }); 

Malheureusement cela enregistre toujours null. db.auths.findOne({nick: 'noname'}) dans mongo shell renvoie toujours une valeur. Que se passe-t-il?

+14

Pas besoin de vous excuser pour avoir été dans CoffeeScript; il suffit de ne pas le marquer avec 'javascript'. –

Répondre

63

trouvé le problème, besoin d'utiliser function(err,obj) à la place:

Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); }); 
+1

Lorsque j'utilise 'findOne' comme ceci, j'obtiens mes données avec succès, mais' obj' n'est pas un objet 'Document'. Quand j'essaie 'obj.nick' et' obj [nick] 'je suis indéfini. Quand j'essaie 'obj.get ('nick')' I get object n'a pas de méthode get. J'ai essayé de nombreuses conversions JSON et créé un 'doc = new Document (obj)'. J'ai aussi essayé 'doc.toObject (obj)' et 'doc.set (obj)'; –

+2

@JonathanCzitkovics Je pense que si vous faites obj.toObject() qui vous donnerait ce que vous cherchiez. – Guy

+5

Lorsque l'opération s'exécute avec succès (err est nul), mais qu'il n'y a pas de correspondance, le document sera également nul. –

2

Vous voudrez peut-être envisager d'utiliser console.log avec l'objet "arguments" intégrés:

console.log(arguments); // would have shown you [0] null, [1] yourResult 

Ce sera toujours sortie tout de vos arguments, peu importe le nombre d'arguments que vous avez.