2012-05-21 15 views
5

Me gustaría poder consultar mi mongoDB y mostrar este resultado en mi página web hecha con Node ... en este momento estoy usando el controlador mongojs. Encontré el controlador muy bueno para poner datos en el DB - La sintaxis es la misma que la de Mongo y puedo poner el código en mi aplicación Node. Esta tarea ... simplemente mostrar los resultados de la consulta en la página web, o incluso en la consola, ha resultado muy difícil. Aquí están las partes relevantes de mi código y lo que probé.¿Cómo capturo una consulta MongoDB como una cadena y la visualizo en mi página Node JS (usando el controlador mongojs)?

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

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

He hecho una colección llamada graph1 y en el prompt de mongo esto produce resultados. Nota ... Sí quiero mostrarlo en HTML ... pero supongo que si consigo imprimirlo en la consola puedo obtenerlo en mi HTML.

actualidad Muestra esto:

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

Una especie de prototipo de lo que realmente quiero, que es la siguiente:

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

Respuesta

2

Prueba esto:

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

El registro de la consola que tenía allí estaba imprimiendo el valor de retorno db.graph1.find() que es su prototipo de función. No devolverá nada útil porque es una función asíncrona. La única manera de hacer las cosas utilizables con los datos que recupera es pasar una devolución de llamada en el que se encargará de los datos:

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

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

Gracias! ¡Esto funciona! – PinkElephantsOnParade

1

Por el bien legado, todo el mundo debe saber, además, que el único momento en que puede manipular sus resultados de la consulta es EN EL RETROCESO ... por lo que no hay que configurarlo con un Var para engañar después, solo dentro de la devolución de llamada) - =.

Utilice lo siguiente para que la consulta resulte una cadena sin problemas. Es cosas biblioteca estándar .:

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

Si quieres ser gueto y utilizar sus resultados fuera de la devolución de llamada, siempre se puede llamar a un/lo que sea script en Perl/Python/sh/bat con su "Stringified" número (en este ejemplo, results_not_ugly_or_messed_up) como un parámetro para almacenarlo en un archivo, etc., para leer y luego usarlo como lo desee.

Para un ejemplo de la vida real completo:

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

}); 
} 
Cuestiones relacionadas