0

私は非常に単純な mongodb map reduce 状況を持っています。私はmysqlの世界で似たようなものが必要です:

select distinct(cookie) from table;

map reduce が mongo のツールであることがわかりました。だから私はこれを書いた:

map2 = Code("function () { emit(this.cookie, 1);}")
reduce2 = Code("function (key, values) {return 1;}")
totalunique = collection.map_reduce(map2, reduce2, out={"reduce":aggregatedcollection}, query=query).count();

ここまでは非常に単純です。これは cron で実行でき、最新の状態に保たaggregatedcollectionれています。タイムスタンプ変数を保存してクエリに入力し、すべての行を 1 回だけ処理するようにします。

これが私の質問です。タイムスタンプで、そのコレクションt1に値があるとしましょう。c1その直後、タイムスタンプで再度実行すると、値t2が返されc2ます。しかし、この次の での実行では、t2を返したいのですが、 の新しい値を に保存したくありませんc2c2aggregatedcollection

別の言い方をすれば、 で 2 回目に実行して、 を返すようにしたいのt2ですが、 (最初の実行からの値)だけが入力されています。c2aggregatedcollectionc1

したがって、で実行した後、返してint2にしたいのですが、これらがこの問題の唯一のパラメーターです。c2c1aggregatedcollection

map reduce 関数のout オプションに焦点を当てる必要があるようですが、それらのオプションのどれも私が望むものではないようです。

もちろん、コレクションを一時コレクションにコピーし、その作業を行ってからドロップすることもできますが、それには時間がかかりすぎます。

4

1 に答える 1

0

これを試してください これの下では、出力が画面に表示されます..

var options = {out: { "inline": 1 }, query : query};  
db.colls.mapReduce(_mapper, _reducer, options);
于 2018-06-21T06:24:33.877 に答える