Mapreduce CouchDB查询以获取具有最大时间戳的文档
My 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”, “货
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]);
}"
}
{
"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}'