2017-06-09 2 views
-1

Ich habe eine Funktion, um JSON-Daten aus einer Mungo-Tabelle zurückzugeben.Erne zuerst einen newpost und dann denselben post durch die post._id.nodejs und mongoose return undefined beim Loggen von JSON-Daten

dbConfig.newPost(post,id,function (err,post) { 
     if(err) throw(err); 
     dbConfig.getPostById(post._id,function (err,doc) { 
      if(err) throw err; 
      var data = JSON.stringify(doc); 
      console.log(data); 
      console.log(data._id); 
     }); 

    }); 

Die Abfrage druckt die Datenvariable als Array von Objekten in JSON, aber wenn ich nur versuchen, drucken die ‚data._id‘ undefiniert zurückgibt. Weiß jemand, was ich falsch mache? Ein Snip des JSON-Arrays ist unter

[{"_id":"593ab877777ae318e4a35637","userPost":"savassge","_creator":{"_id":"592b8c2d0c28f01970ad4df7","username":"adrian"},"__v":0,"dateCreated":"2017-06-09T15:02:15.716Z"}] 
+0

Try - 'console.log (data [0] ._id); ' –

Antwort

0

Zum einem

var data ist ein String, kein Objekt noch ein Array, wie Sie den Rückgabewert von JSON.stringify(doc) auf Ihre data Variable zuweisen. Die JSON.stringify() -Methode konvertiert einen JavaScript-Wert in einen JSON-String:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Zweitens

Sie versuchen, eine nicht vorhandene Eigenschaft Ihres doc Array zuzugreifen, diese Eigenschaft, wie Sie dargestellt in Ihre Frage existiert in jedem Objekt innerhalb Ihres Arrays. Um die _id Eigenschaft jedes Objekts zu drucken (unter der Annahme, dass das, was Sie tun möchten), werden Sie über das Array iterieren müssen zuerst:

dbConfig.newPost(post, id, function (err, post) { 
    if(err) throw(err); 
    dbConfig.getPostById(post._id, function(err, data) { 
    if(err) throw err; 
    data.forEach(function(doc) { 
     console.log(doc); 
     console.log(doc._id); 
    }); 
    }); 
}); 
+0

Vielen Dank, aber mein Problem war, dass ich find() verwendet, um das Dokument anstelle von findOne() abrufen, die es veranlassen, ein Array von Objekten zurückzugeben – Adrian

0

Da gibt es keine "data.id". Es gibt "Daten [0] ._ ID". Sie versuchen, auf ein Array von Objekten zuzugreifen, nicht auf ein Objekt.

+0

vielen Dank, die mir geholfen haben, das wahre Problem zu finden. Ich benutzte die find-Methode, die Arrays von Objekten zurückgab, die nicht existierten. Ich habe findOne benutzt, die nur ein einziges Dokument zurückgeben. – Adrian

+0

Gern geschehen;) – sidewinder

Verwandte Themen