【问题标题】:couchdb - querying views with start_key and end_keycouchdb - 使用 start_key 和 end_key 查询视图
【发布时间】:2014-08-28 04:16:05
【问题描述】:

我有一个像这样的 couchdb 记录结构

[
    {
        "app_version": 2,
        "platform": "android",
        "session": {
            "timestamp": "2014-08-20T00:00:00.000Z",
            "session_id": "TOnNIhCNQ31LlkpEPQ7XnN1D",
            "ip": "202.150.213.66",
            "location": "1.30324,103.5498"
        }

    },
{
    "app_version": 2,
    "platform": "android",
    "session": {
        "timestamp": "2014-08-21T00:00:00.000Z",
        "session_id": "TOnNIhCNQ31LlkpEPQ7XnN1D",
        "ip": "202.150.213.66",
        "location": "1.30324,103.5498"
    }

}
{
    "app_version": 2,
    "platform": "ios",
    "session": {
        "timestamp": "2014-08-21T00:00:00.000Z",
        "session_id": "TOnNIhCNQ31LlkpEPQ7XnN1D",
        "ip": "202.150.213.66",
        "location": "1.30324,103.5498"
    }

},
{
    "app_version": 1,
    "platform": "ios",
    "session": {
        "timestamp": "2014-08-21T00:00:00.000Z",
        "session_id": "TOnNIhCNQ31LlkpEPQ7XnN1D",
        "ip": "202.150.213.66",
        "location": "1.30324,103.5498"
    }

    }
]

我需要查询在给定日期数和 app_version 数之间发生的所有记录,并且我想通过平台获取每个记录的总数。

所以我写了一个这样的map-reduce函数;

   "total": {
               "map": "function(doc) { 
                     date = doc.session.timestamp.split("T")[0];   
                     emit([date, doc.app_version,doc.platform], 1);
                     }",
               "reduce": "_count"
           }

通过将记录分组为日期,这给了我正确的输出。

["2014-08-20", 2, "android"]    2
["2014-08-20", 2, "ios"]        1
["2014-08-21", 2, "android"]    1
["2014-08-21", 2, "ios"]        1

但是当我尝试使用 start_key 和 end_key(按日期范围查询)查询它们时,问题就来了

我发送GET请求如下;

http://localhost/dummy_db_new/_design/views/_view/total?
start_key=["2014-08-20",2,WHAT_TO_PUT_HERE]
&end_key=["2014-08-20",2,WHAT_TO_PUT_HERE]
&group=true

我需要知道在上面的地方放什么才能让它拥有任何平台(一个字符串)。

【问题讨论】:

    标签: mapreduce couchdb


    【解决方案1】:

    哦,我找到了答案。

    答案是使用通配符。所以基本上我用通配符发送了请求,它可以接受任何平台类型

    http://localhost/dummy_db_new/_design/views/_view/total?
    start_key=["2014-08-20",2,0]
    &end_key=["2014-08-20",2,{}]
    &group=true
    

    {} 表示 javascript 对象,因此它可以接受任何 JS 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多