Mapreduce CouchDB查询以获取具有最大时间戳的文档

Mapreduce CouchDB查询以获取具有最大时间戳的文档,mapreduce,max,couchdb,couchapp,Mapreduce,Max,Couchdb,Couchapp,My CouchDB文档格式如下,根据价格变化,可以有多个文档具有相同的product\u id&store\u id { “_id”:“6b645d3b173b4776db38eb9fe6014a4c”, “修订版”:“1-86a1d9f0af09beaa38b6fbc3095f06a8”, “产品id”:“6b645d3b173b4776db38eb9fe60148ab”, “门店id”:“0364e82c13b66325ee86f99f53049d39”, “价格”:“12000”, “货

My CouchDB文档格式如下,根据价格变化,可以有多个文档具有相同的
product\u id
&
store\u id

{
“_id”:“6b645d3b173b4776db38eb9fe6014a4c”,
“修订版”:“1-86a1d9f0af09beaa38b6fbc3095f06a8”,
“产品id”:“6b645d3b173b4776db38eb9fe60148ab”,
“门店id”:“0364e82c13b66325ee86f99f53049d39”,
“价格”:“12000”,
“货币”:“澳元”,
“时间”:1579000390326
}

我需要为给定的
产品id
&
商店id

为此,使用我当前的解决方案,我必须执行以下两个查询:

  • 获取最新的时间戳。这将返回给定
    产品id
    商店id

    “按产品、商店id划分的最长时间”:{
    “reduce”:“函数(键、值){var id=[]
    forEach(函数(时间){
    如果(!isNaN(时间)){
    id.push(时间);
    }
    });
    返回Math.max.apply(Math,id)
    }",
    “映射”:“函数(doc){emit([doc.store_id,doc.product_id],doc.time);”
    }

  • 基于最新的
    时间戳
    ,我再次查询以获取具有三个参数的文档,即
    存储id
    产品id
    时间
    ,如下所示

    “存储产品时间”:{
    “地图”:“功能(文档){
    发出([doc.store_id,doc.product_id,doc.time]);
    }"
    }

  • 这对我来说非常有效,但我的问题是我需要进行两次DB查询来获取文档,并在一次DB查询中寻找获取文档的解决方案

    在CouchDB中,选择器也无法通过最大值获取文档。

    使用CouchDB,您可以对结果进行降序排序,并将结果限制为一个文档,如下所示:

    {
       "selector": {
          "_id": {
             "$gt": null
          }
       },
       "sort": [
          {
             "time": "desc"
          }
       ],
       "limit": 1
    }
    
    卷曲

    curl-H'内容类型:application/json'-X POSThttp://localhost:5984//_find -d'{“选择器”:{“_id”:{“$gt”:null}},“排序”:[{“时间”:“描述”}],“限制”:1}'
    
    请注意,必须事先为排序字段
    时间
    创建索引(请参阅)


    还有一件事是,当我们按
    time
    键排序时,需要为
    time
    创建索引
    curl -H 'Content-Type: application/json' -X POST http://localhost:5984/<db>/_find -d '{"selector":{"_id":{"$gt":null}},"sort":[{"time": "desc"}],"limit": 1}'