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最新状态。我保存了一个时间戳变量以放入我的查询中,以确保我只处理每一行一次。

这是我的问题。假设在时间戳t1c1在那个集合中有值。不久之后,我在时间戳再次运行它t2并返回c2值。但是在随后的运行中t2,我希望它返回c2但我不希望将新值c2保存在aggregatedcollection.

或者换句话说,我想在第二次运行它t2,让它返回c2aggregatedcollection只填充c1(第一次运行的值)。

所以在运行 at 之后t2,我希望它返回c2并拥有c1in aggregatedcollection,这些是这个问题的唯一参数。

看来我应该专注于 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 回答