0

私はJavaでMongoDBを使用しています。

以下に示すように、Mongo DBに指定された文字列を持つシンボルが存在するかどうかを調べようとしています。これは機能していますが、問題は、非常に高価なMOngoDBを2回呼び出すことです。1回の呼び出しに減らして、パフォーマンスを向上させる方法はありますか。

これは私のコードです

public class Test
{
    public static void main(String args[])
    {
        DBCursor cursor  = null;
        DBCollection coll = null;
        BasicDBObject query = new BasicDBObject();
        String symbol = args[0];
        query.put("symbol", "" + symbol);
        cursor  = coll.find(query);
        int count = coll.find(query).count();

        /* Here is want to avoid the count call , is there anyway by which
           the cursor the obtained cursor tells , that there exists the symbol
           in Mongo DB */

        if(count>=1)
        {
            // If found then do 
            if (cursor != null) {

            }
        }
        else
        {
            // If Not  found then do 
        } 
    }
}
4

2 に答える 2

2

なんで使ってるcountの?hasNext()のメソッドを使用して、DBCursor何かがフェッチされているかどうかをテストできます。

cursor  = coll.find(query);

if (cursor.hasNext()) {
    // Found
    System.out.println(cursor.next());
} else {
    // Not found
}

ただし、count()メソッドを使用する場合は、新しいクエリを実行する必要もありません。db.collection.find()のみを返すのでDBCursor。したがって、count使用しているメソッドは、返されたにありDBCursorます。count()したがって、同じ参照で呼び出すだけcursorです:-

cursor  = coll.find(query);
int count = cursor.count();

if (count >= 1) {
    // Found
    System.out.println(cursor.next());
} else {
    // Not found
}

ただし、存在する場合は次の要素をフェッチする場合は、最初のアプローチを使用する必要があります。

于 2012-12-27T06:02:22.613 に答える
2

カウントを取得するために明示的に呼び出す必要はありません。

cursor.hasNext()カーソルに要素があるかどうかを返します。

    cursor  = coll.find(query);
    while(cursor.hasNext()){
     // found
    }else{
     // not found
    }

使用することもできます cursor.count()

The count() method counts the number of documents referenced by a cursor. 

count()次のプロトタイプのように、メソッドをfind()クエリに追加して、一致するドキュメントの数を返します。

db.collection.find().count()
   or 
db.collection.count()

この操作は実際には実行されません。find();代わりに、操作はによって返される結果をカウントしますfind()

参照

于 2012-12-27T06:48:55.540 に答える