2012-05-21 9 views
5

Vorrei poter interrogare il mio mongoDB e visualizzare questo risultato sulla mia pagina web realizzata con Node ... in questo momento sto usando il driver mongojs - Ho trovato il driver molto buono per mettere i dati nel DB - la sintassi è la stessa della shell di Mongo e posso inserire il codice direttamente nella mia app di Node. Questo compito ... mostrare semplicemente i risultati della query sulla pagina web, o anche sulla console, si è rivelato molto difficile. Ecco le parti rilevanti del mio codice e ciò che ho provato.Come posso acquisire una query MongoDB come stringa e visualizzarla nella pagina JS del mio nodo (utilizzando il driver mongojs)?

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

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

Ho creato una raccolta denominata graph1 e nel prompt mongo questo produce risultati. Nota ... Voglio visualizzarlo in HTML ... ma spero che se riesco a farlo stampare su console posso farlo nel mio HTML.

Attualmente Risulterà:

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

Una sorta di prototipo di quello che in realtà voglio, che è questo:

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

risposta

2

Prova questo:

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

Il log della console che avevi lì stava stampando il valore di ritorno db.graph1.find() che è il suo prototipo di funzione. Non restituirà nulla di utile perché è una funzione asincrona. L'unico modo per fare le cose utilizzabili con i dati che recupera è quello di passare una richiamata in cui gestirà i dati:

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

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

Grazie! Funziona! – PinkElephantsOnParade

1

Per l'amor eredità, tutti dovrebbero sapere, inoltre, che l'unica volta che è possibile manipolare i risultati della query è IN CALLBACK ... quindi non impostarlo su un a un var per ingannare con in seguito, solo all'interno del callback) - =.

Utilizzare quanto segue per rendere la query il risultato di una stringa senza problemi. E 'roba libreria standard .:

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

Se si vuole essere ghetto e utilizzare i risultati al di fuori della richiamata, si può sempre chiamare un Perl/Python/sh/bat/qualunque script con il risultato "stringata" (in questo esempio, results_not_ugly_or_messed_up) come parametro per memorizzarlo in un file, ecc., per leggere e quindi usare come preferisci.

Per un completo esempio di vita reale:

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"); 
    }); 

}); 
} 
Problemi correlati