使用Map Reduce在24小时内查询创建文档的数量。

时间:2017-10-02 14:17:43

标签: mapreduce cloudant

我想使用IBM Cloudant数据库的Map Reduce进程在24小时内计算创建文档的数量。这是我的Map-Reduce代码:

function (doc) {
    docTime = (new Date(doc.created_at)).getTime();
    currentTime = (new Date()).getTime();
    if ((86400000 - (currentTime - docTime)) > 0) {
          emit(doc.deviceID, 1);
    }
}

在reduce阶段,我使用count函数来获取文档的总数。但是,第一次构建Map-Reduce并且未针对每个查询更新时,可以看到值 currentTime

如果收到任何克服这个问题的建议,那就太好了。

非常感谢你。

1 个答案:

答案 0 :(得分:3)

我认为你有几个选择,但我认为视图不是其中之一。我认为只在插入/更新时计算视图。

您的第一个选择是使用Cloudant查询。您可以在TextView lastTV= (TextView) findViewById(R.id.lastTvValue); lastTV.setOnTouchListener(new View.OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_DOWN) { //do stuff here } Log.i("click text", "kakak"); return false; } }); 字段上创建索引,并使用以下选择器:

created_at

这个问题是你必须循环并计算所有条目。另一种方法是使用Cloudant Search。在Cloudant中创建类似于以下内容的搜索索引:

"selector": {
   "$and": [
      {"created_at" : { "$gt": 1506874127 }},
      {"created_at": { "$lt": 1506960651 }}
   ]
}

使用Cloudant仪表板时,这与以下内容相对应:

设计doc = { "_id": "_design/allDocs", "views": {}, "language": "javascript", "indexes": { "byCreatedAt": { "analyzer": "standard", "index": "function (doc) {\n if (doc.created_at && doc.device_id) {\n index(\"created_at\", doc.created_at);\n index(\"device_id\", doc.device_id);\n }\n}" } } }

索引名称= allDocs

index function =

byCreatedAt

然后,您可以使用范围运行搜索 - 范围是24小时前到现在的时间 - 并指定function (doc) { if (doc.created_at && doc.device_id) { index("created_at", doc.created_at); index("device_id", doc.device_id); } } 按设备ID对结果进行分组。例如,

group_field=device_id

此处搜索查询为:

https://<YOUR_INSTANCE>.cloudant.com/<YOUR_DB>/_design/allDocs/_search/byCreatedAt?q=created_at%3A[1506874127%20TO%201506960651]&group_field=device_id&limit=1

我使用的是unix时间戳。你也可以使用我相信的日期字符串。我还将限制设置为1.这将仅返回每个组中的第一个条目,因为您只需要总计数(对于分组查询,不允许limit = 0)。以下是一个示例结果:

created_at:[1506874127 TO 1506960651]

{ "total_rows":3, "groups":[ { "by":"1", "total_rows":2, "rows":[ { "id":"263a81ea76528dead3a4185df3676f62", "order":[ 1.0, 0 ], "fields":{ } } ] }, { "by":"2", "total_rows":1, "rows":[ { "id":"d857ac5c58eebde4c21ffdcf3e0fd321", "order":[ 1.0, 0 ], "fields":{ } } ] } ] } 字段是设备ID。