2012-05-21 2 views
5

Ich möchte meine mongoDB abfragen und dieses Ergebnis auf meiner mit Node erstellten Webseite anzeigen können ... im Moment benutze ich den mongojs-Treiber - ich habe den Treiber sehr gut gefunden, um Daten in die DB zu schreiben - Die Syntax ist die gleiche wie die Mongo-Shell und ich kann den Code direkt in meine Node-App einfügen. Diese Aufgabe ... einfach die Ergebnisse der Abfrage auf der Webseite oder sogar auf der Konsole zu zeigen, hat sich als sehr schwierig erwiesen. Hier sind die relevanten Teile meines Codes und was ich versucht habe.Wie kann ich eine MongoDB-Abfrage als Zeichenfolge erfassen und auf meiner Node-JS-Seite anzeigen (mit dem mongojs-Treiber)?

var databaseUrl = "test"; // "username:[email protected]/mydb" 
var collections = ["graph1"] 
var db = require("mongojs").connect(databaseUrl, collections); 

console.log(db.graph1.find()); 

Ich habe eine Sammlung namens graph1 gemacht und in der Mongo veranlassen diese Ergebnisse liefert. Hinweis ... Ich möchte es in HTML anzeigen ... aber ich spreche, wenn ich es auf die Konsole drucken kann, kann ich es in meinem HTML bekommen.

Es gibt momentan dies:

{_oncursor: { get: [Function], put: [Function] } } 

Eine Art Prototyp für das, was ich eigentlich will, was das ist:

{ "x" : "0", "y" : "1343725568", "_id" : ObjectId("4fba6....") } 

Antwort

2

Try this:

db.graph1.find({}, function(err, result){ 
    if (err || !result) console.log(" an error has occurred"); 
    else { 
    console.log(result); 
    } 
    }); 

Die Protokoll Konsole das, was Sie dort hatten, war Drucken der db.graph1.find() Rückgabewert, der seine Funktion Prototyp ist. Es wird nichts Nützliches zurückgeben, da es sich um eine asynchrone Funktion handelt. Der einzige Weg, brauchbare Dinge mit den Daten zu tun, ruft es ist, einen Rückruf zu übergeben, in dem die Daten handhaben:

db.graph1.find({ //what you want to search for here }, callback); 

    function callback(result_from_mongo) { 
    // do stuff here with result_from_mongo 
    } 
+0

Dank! Das funktioniert! – PinkElephantsOnParade

1

Für älteren willen, soll jeder wissen weiter, dass die einzige Zeit, die Sie Ihre Abfrageergebnisse manipulieren können, ist IM RÜCKRUF ... also setze es nicht auf a zu einer var, um danach zu täuschen, nur innerhalb des callback) - =.

Verwenden Sie Folgendes, um das Abfrageergebnis zu einer Zeichenfolge ohne Probleme zu machen. Es ist Standard-Bibliothek Sachen .:

var results_not_ugly_or_messed_up = (JSON.stringify(result)); 

Wenn Sie Ghetto sein wollen und die Ergebnisse nutzen außerhalb des Callback, könnten Sie immer rufen ein Perl/Python/sh/bat/was auch immer Skript mit Ihrem „Zeichenfolge“ Ergebnis (in diesem Beispiel results_not_ugly_or_messed_up) als Parameter, um es in einer Datei usw. zu speichern, um sie auszulesen und dann wie gewünscht zu verwenden.

Für ein vollständiges Beispiel aus der Praxis:

db.newguestbook.find({"Name" : /[Aa]/ },[],function(err,p) //newguestbook is a collection I have  
//you will need to change that unless you make a collection called newguestbook 
{ 
    cursor = p; 
    console.log(cursor); 
    console.log(JSON.stringify(cursor))); //We have a nice string, see? 
    var exec = require('child_process').exec; 
    exec("perl writetofile.pl " + JSON.stringify(cursor) , function(err, 
    stdout, stderr) 
    { 
     console.log("Perl run to store this result in a file"); 
    }); 

}); 
}