Como faço para capturar uma consulta MongoDB como uma string e exibi-la em minha página Node JS (usando o driver mongojs)?

StackOverflow https://stackoverflow.com//questions/10690090

Pergunta

Gostaria de poder consultar meu mongoDB e exibir esse resultado em minha página web feita com Node... no momento estou usando o driver mongojs - achei o driver muito bom para colocar dados no banco de dados - o a sintaxe é a mesma do shell do Mongo e posso colocar o código diretamente no meu aplicativo Node.Esta tarefa...simplesmente mostrar os resultados da consulta na página web, ou mesmo no console, tem se mostrado muito difícil.Aqui estão as partes relevantes do meu código e o que tentei.

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

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

Eu fiz uma coleção chamada graph1 e no prompt do mongo isso produz resultados.Observação... eu quero exibi-lo em HTML... mas suponho que se conseguir imprimi-lo no console, poderei obtê-lo em meu HTML.

Atualmente produz isto:

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

Algum tipo de protótipo para o que eu realmente quero, que é este:

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

Solução

Experimente isto:

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

O log do console que você tinha estava imprimindo o valor de retorno db.graph1.find() que é o protótipo da função.Não retornará nada de útil porque é uma função assíncrona.A única maneira de fazer coisas úteis com os dados recuperados é passar um retorno de chamada que tratará os dados:

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

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

Outras dicas

Pelo bem do legado, todos devem saber que o único momento em que você pode manipular os resultados da sua consulta é NO CALLBACK... portanto, não é necessário configurá-lo como a para um var para brincar depois, apenas dentro do retorno de chamada )-=.

Use o seguinte para tornar o resultado da consulta uma string sem problemas.É material padrão da biblioteca.:

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

Se você quiser ser um gueto e usar seus resultados fora do retorno de chamada, você sempre pode chamar um script perl/python/sh/bat/qualquer que seja com seu resultado "stringificado" (neste exemplo,results_not_ugly_or_messed_up) como um parâmetro para armazená-lo em um arquivo, etc., para ler e usar como desejar.

Para um exemplo completo da 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");
    });

});
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top