我想使用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 。
如果收到任何克服这个问题的建议,那就太好了。
非常感谢你。
答案 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。