¿Cómo capturo una consulta MongoDB como una cadena y la muestro en mi página Node JS (usando el controlador mongojs)?

Me gustaría poder consultar mi mongoDB y mostrar este resultado en mi página web hecha con Node... ahora mismo estoy usando el controlador mongojs. He encontrado que el controlador es muy bueno para poner datos en la base de datos. La sintaxis es la misma que la del shell de Mongo y puedo poner el código directamente 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é.

var databaseUrl = "test"; // "username:password@example.com/mydb"
var collections = ["graph1"]
var db = require("mongojs").connect(databaseUrl, collections);

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

Hice una colección llamada graph1 y en el aviso de mongo esto da resultados. Nota... quiero mostrarlo en HTML... pero supongo que si puedo hacer que se imprima en la consola, puedo obtenerlo en mi HTML.

Actualmente genera esto:

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

Algún tipo de prototipo de lo que realmente quiero, que es este:

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

preguntado el 21 de mayo de 12 a las 18:05

2 Respuestas

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 forma de hacer cosas utilizables con los datos que recupera es pasar una devolución de llamada en la que manejará 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
    }

contestado el 21 de mayo de 12 a las 23:05

Por el bien del legado, todos deben saber además que la única vez que puede manipular los resultados de su consulta es EN LA DEVOLUCIÓN DE LLAMADA ... así que no lo configure en a a var para engañar después, solo dentro de la devolución de llamada )-=.

Use lo siguiente para hacer que el resultado de la consulta sea una cadena sin problemas. Es material estándar de la biblioteca.:

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

Si quiere ser un ghetto y usar sus resultados fuera de la devolución de llamada, siempre puede llamar a un script perl/python/sh/bat/whatever con su resultado "en cadena" (en este ejemplo, resultados_no_feos_o_desordenados) como un parámetro para almacenarlo en un archivo, etc., para leer y luego usar como quieras.

Para un ejemplo completo de la vida real:

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

});
}

contestado el 22 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.