我需要创建一些复杂的查询,你能帮我写吗?
在我的数据库中我有一个文档列表,例如:
{
"_id": "26",
"_rev": "1-53ac67e9ec4b4ce8ffa9cd609e107aaf",
"customer_name": "Praneeth",
"type": "trip",
"duration": "10 hours 27 mins",
"end_time": "Jan 1, 2014 10:11:00 PM",
"start_time": "Jan 11, 2014 8:46:00 AM",
}
现在我想创建一个视图,该视图可以读取当前timestamp
并从URL中键入以获取end_time
小于或等于当前timestamp
且类型为"trip"
的文档。这里的类型可以是任何东西,不仅是trip
,基于type
从URL传递,我应该得到文档。
假设我用SQL编写查询,它将是这样的:
SELECT * FROM table_name WHERE end_time>="current time passed from the URL as key" and type='type passed from the url as key'
我的视图就像下面现在如何从URL调用这个视图来获得所需的输出
function(doc){
var startTime=new Date(doc.start_time);
var endTime=new Date(doc.end_time);
emit([doc.type,endTime.getTime()], doc);
}
<1是正确的??
http://localhost:5984/trip/_design/current_trip/_view/current_trip?startkey=["trip",1388607960000]&end_key={}
解决方案只是在您的视图[trip, end_time]
的映射函数中发出。CouchDB对数组键顺序的规则是按字典顺序排序。示例数据集将按如下方式排序:
{ end_time: 40, trip: "ABC", ... },
{ end_time: 10, trip: "BCA", ... },
{ end_time: 20, trip: "BCA", ... },
{ end_time: 30, trip: "CAB", ... },
...
end_time
和客户最近的end_time首先,你可以考虑查询参数descending=true
是非常有用的(或者发出[trip, -end_time]
,如果你需要在键数组中有不同的字段顺序更有用)。这可能对你有用…假设你只想与"现在"进行比较,你不需要担心在url上传递任何参数。只要正常访问视图。
function(doc) {
var now = new Date();
var endTime = new Date(doc.end_time);
if(doc.type == "trip" && endTime > now)
emit( ... );
}