2012-05-09 5 views
3

Mongodbのmapreduce関数は、find関数のようなデータベースからレコードをスキップする手段を提供していません。それはクエリの機能を持っています。&制限オプションを並べ替えます。しかし、私はデータベースからいくつかのレコードをスキップしたいと思います。ソリューションを提供してください。mongodb mapreduce関数はスキップ機能を提供していませんが、これに対する解決策はありますか?

ありがとうございます。

答えて

12

適切に構造化されたmap-reduceクエリを使用すると、コレクション内の特定のドキュメントをスキップできます。

また、Sergioが指摘しているように、単にmap()内で特定のドキュメントを出力しないこともできます。スコープを使用してグローバルカウンタ変数を定義することは、指定した範囲のドキュメントにemitを制限する1つの方法です。例として、オブジェクトIDによってソートされた(したがって、挿入時間によってソート)されている最初の20件のドキュメントスキップする:

db.collection_name.mapReduce(map, reduce, {out: example_output, sort: {id:-1}, scope: "var counter=0")}; 

を地図機能:

function(){ 
    counter ++; 
    if (counter > 20){ 
     emit(key, value); 
    } 
} 
+0

ありがとう、これは私が欲しいものです。 –

0

私はどのバージョン以来、わからないんだけどこの機能は提供されていますが、確かにMongoDB 2.6でmapReduce() function provides query parameter

query文書

オプション。 マップに入力された文書を決定するための照会演算子を使用して選択基準を指定します。

には、次の次のプロトタイプの文書を含むコレクションの受注に対して操作をマップ減らす考えてみましょう:

{ 
    _id: ObjectId("50a8240b927d5d8b5891743c"), 
    cust_id: "abc123", 
    ord_date: new Date("Oct 04, 2012"), 
    status: 'A', 
    price: 25, 
    items: [ { sku: "mmm", qty: 5, price: 2.5 }, 
       { sku: "nnn", qty: 5, price: 2.5 } ] 
} 

は、使用して受注コレクションにマップ-減らす操作を実行mapFunction2、reduceFunction2、およびfinalizeFunction2関数を呼び出します。

db.orders.mapReduce(mapFunction2, 
       reduceFunction2, 
       { 
        out: { merge: "map_reduce_example" }, 
        query: { ord_date: 
           { $gt: new Date('01/01/2012') } 
          }, 
        finalize: finalizeFunction2 
       } 
       ) 

この操作は、new Date(01/01/2012)より大きいord_dateとドキュメントのみを選択するために、クエリのフィールドを使用しています。次に、結果をコレクションmap_reduce_exampleに出力します。 map_reduce_exampleコレクションがすでに存在する場合、操作は既存の内容をこのmap-reduce操作の結果とマージします。

関連する問題