0

データベースに example というコレクションがあり、次のようになります。

{
    "event" : "cheat",
    "message" : {
        "tableid" : 398,
        "time" : 1381853438870,
        "link" : "/dbcheat/table398/iID485"
    },
    "_id" : ObjectId("525d68fe99ddc6a019000008")
}

このようなレコードは何千もありますが、たとえば最初の 50 件を探したいと思います。

これを実行する最善の方法は forEach() 関数を使用することであると調査しました。私は SQL に慣れており、Mongo を使い始めたばかりで、objectID が一意であることを理解していますが、それから注文を得ることができません。

var cursor = db.example.find();
cursor.forEach(function(x){

    console.log(x.message);

});

しかし、何らかの理由で x が常に null であるため、エラーが発生します。

何が間違っている可能性がありますか?

4

3 に答える 3

1

function( error, cursor ) の find() にハンドラーを追加する必要があり、エラーが null でカーソルが存在すると仮定して、そのカーソル内に、cursor.toArray( function( error, data ) ) を実行する必要があります。

最初のものでは、データが来るのを待たなければならず、エラーが予想されます。2番目のものでは、カーソルは使用可能なjsonの配列に変わります:>これはあなたが必要としていたものです.

db.example.find( function( error, cursor)
{
    if( error || !cursor)
    {
        console.log("error getting items");
    }
    else
    {
        cursor.toArray( function( error, items)
        {
            if( error || !items)
            {
                console.log("error getting items");
            }
            else
            {
                console.log( JSON.stringify( items ) );
            }
        });
    });
}
于 2013-10-17T14:33:23.867 に答える
0

「最初の 50 件」を確認するには、ドキュメントを時間順に並べ替え、クエリ結果を最初の 50 件に制限することをお勧めします。

db.coll.find().sort({"message.time":1}).limit(50)

その後、カーソルで toArray() メソッドを使用して、その配列内のドキュメントにアクセスできます。

于 2013-10-17T14:38:47.297 に答える
0

最初の X 番号を出力するには、次のようなパターンを使用できます。

db.example.find().limit(x); 

x はx、コレクションの最初の要素を指定する整数です。

それらをすべて取得したい場合は、使用するだけです

db.example.find()

y最初の要素をスキップして次の要素を出力したい場合は、次のxようなものを使用します

db.example.skip(y).limit(x);

また、並べ替えを行うには、時間フィールドを使用できます。

于 2013-10-17T14:39:05.220 に答える