6

mongoDB にクエリを実行し、この結果を Node.js で作成した Web ページに表示できるようにしたいと考えています...現在、mongojs ドライバーを使用しています。このドライバーは、データを DB に入れるのに非常に適していることがわかりました。構文は Mongo シェルと同じであり、Node アプリにコードを正しく配置できます。このタスクは、クエリの結果を Web ページやコンソールに表示するだけでも、非常に困難であることがわかっています。これが私のコードの関連部分と私が試したことです。

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 results_not_ugly_or_messed_up = (JSON.stringify(result));

ゲットーになり、コールバックの外で結果を使用したい場合は、いつでも「文字列化された」結果 (この例ではresults_not_ugly_or_messed_up) を格納するパラメーターとして perl/python/sh/bat/whatever スクリプトを呼び出すことができます。ファイルなどを読み込んで、自由に使用してください。

完全な実際の例については、次のとおりです。

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 に答える