0

「機能する」map-reduceクエリがあり、私が望むことを行いますが、出力データを読み返す方法をワークアウトできないため、これまでのところ出力データをうまく利用できませんでした...説明させてください...ここにあります私の放出:

emit( { jobid: this.job_id, type: this.type}, { count: 1 })

そしてreduce関数:

reduce: function (key, values) {
    var total = 0;
    for( i = 0; i < values.length; i++ ) {
        total += values[i].count;
    }
    return { jobid: this.job_id, type:this.type, count: total};
},

それは機能し、結果コレクションで得られる出力は次のようになります。

{ "_id" : { "jobid" : "5051ef142a120", "type" : 3 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051ef142a120", "type" : 5 }, "value" : { "count" : 43 } }
{ "_id" : { "jobid" : "5051f1a9d5442", "type" : 2 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f1a9d5442", "type" : 3 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f299340b1", "type" : 2 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f299340b1", "type" : 3 }, "value" : { "count" : 1 } }

しかし、タイプを無視しながら、「jobid」ですべてのジョブIDエントリを見つけるというクエリを発行するにはどうすればよいでしょうか? 2行の出力を期待して、これを最初に試しましたが、何も得られませんでした!

db.mrtest.find( { "_id": { "jobid" : "5051f299340b1" }} );

私も試して失敗しました:

db.mrtest.find( { "_id": { "jobid" : "5051f299340b1" }} );

そしてその間:

db.mrtest.find( { "_id" : { "jobid" : "5051f299340b1", "type" : 2 }} )

期待どおりに1行の出力を生成しますが、これを再度変更しても何も生成されません:

db.mrtest.find( { "_id" : { "jobid" : "5051f299340b1", "type" : { $in: [2] }}} )

_id フィールドではそのようなことはできないという印象を受けましたが、できますか? 代わりに mr 出力を再編成する必要があると考えていますが、それはどういうわけか失敗しているように感じます?!?!

ヘルプ!

PS: カウントが「値」と呼ばれるフィールドに含まれている理由を説明できる人がいれば、それも歓迎します!"5051f299340b1"

4

2 に答える 2

1
db.mrtest.find( { "_id.jobid": "506ea3a85e126" })
于 2012-10-08T14:45:08.670 に答える
1

やってみました:

db.mrtest.find( { "_id.jobid": "506ea3a85e126" })

それは私のために働く!

于 2012-10-08T14:48:46.523 に答える