6

我希望能够查询我的 mongoDB 并在我用 Node 制作的网页上显示这个结果......现在我正在使用 mongojs 驱动程序 - 我发现该驱动程序非常适合将数据放入数据库 -语法与 Mongo shell 相同,我可以将代码直接放在我的 Node 应用程序中。这个任务……仅仅在网页上,甚至在控制台上显示查询的结果,已经证明是非常困难的。这是我的代码的相关部分以及我尝试过的内容。

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

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

我制作了一个名为 graph1 的集合,并在 mongo 提示符中产生了结果。注意...我确实想在 HTML 中显示它...但我想如果我可以让它打印到控制台我可以在我的 HTML 中得到它。

它当前输出:

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

我真正想要的某种原型,这是:

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

2 回答 2

3

试试这个:

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

您在那里的控制台日志正在打印 db.graph1.find() 返回值,这是它的函数原型。它不会返回任何有用的东西,因为它是一个异步函数。使用它检索的数据做有用的事情的唯一方法是传递一个回调来处理数据:

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

    function callback(result_from_mongo) {
    // do stuff here with result_from_mongo
    }
于 2012-05-21T22:28:34.983 回答
1

为了遗产,每个人都应该进一步知道,您可以操纵查询结果的唯一时间是在回调中......所以不要将它设置为一个 var 来愚弄之后,只能在回调中)-=。

使用以下内容使查询结果成为字符串而不会出现问题。这是标准库的东西。:

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

如果你想成为 ghetto 并在回调之外使用你的结果,你总是可以调用 perl/python/sh/bat/whatever 脚本,将你的“字符串化”结果(在本例中,results_not_ugly_or_messed_up)作为参数来存储它一个文件等,读取然后随意使用。

对于一个完整的现实生活示例:

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

});
}
于 2012-05-22T15:19:37.513 回答