我对这个map-reduce的事情很陌生,我正在使用它来过滤掉我网站上的用户。
我想问的是如何在其中进行基于群组的过滤?
让我向您解释一下这个场景: - 我想过滤掉用户在特定日期之间询问的问题,例如>从: - 01/01/2016到: - 03/02/2016。
我通过运行MR函数得到下面给出的数据我还想在Cloudant上再次运行Reduce函数,以便我可以在特定日期之间进行查询
我正在使用Cloudant,Mongodb,Couchdb和JavaScript。
感谢您的回复,并将宝贵的时间用于阅读我的查询。很抱歉,如果您对查询有所了解,我会对此感到陌生。
答案 0 :(得分:0)
如果查询中的日期是在运行时动态提供的,那么视图可能不是正确的方法。您可以使用Cloudant Query在运行时运行动态查询。例如,您可以在日期字段上创建索引,如下所示:
{
"index": {
"fields": [
"mydate"
]
},
"type": "json"
}
然后在Cloudant查询中使用以下选择器:
"selector": {
"$and": [
{"mydate" : { "$gt": 1506874127 }},
{"mydate": { "$lt": 1506960651 }}
]
}
我在这个例子中使用unix时间戳。
或者,您可以使用Cloudant Search。在Cloudant中创建类似于以下内容的搜索索引:
{
"_id": "_design/allDocs",
"views": {},
"language": "javascript",
"indexes": {
"byMyDate": {
"analyzer": "standard",
"index": "function (doc) {\n if (doc.mydate) {\n index(\"mydate\", doc.mydate);\n }\n}"
}
}
}
使用Cloudant仪表板时,这与以下内容相对应:
设计doc = allDocs
索引名称= byMyDate
index function =
function (doc) {
if (doc.mydate) {
index("mydate", doc.mydate);
}
}
然后您可以使用范围运行搜索。例如,
https://<YOUR_INSTANCE>.cloudant.com/<YOUR_DB>/_design/allDocs/_search/byMyDate?q=mydate%3A[1506874127%20TO%201506960651]
此处搜索查询为:
mydate:[1506874127 TO 1506960651]
同样,我使用的是unix时间戳。你也可以使用我相信的日期字符串。
Cloudant查询:https://console.bluemix.net/docs/services/Cloudant/api/cloudant_query.html
Cloudant搜索:https://console.bluemix.net/docs/services/Cloudant/api/search.html#search