如何在couchdb中选择一段时间内的文档?

时间:2012-03-27 04:12:29

标签: couchdb

我有一个包含照片的couchdb数据库,每张照片只有一个文档。我想创建一个基于时间接近度对照片进行分组的视图,即在30分钟内创建的分组照片。

2 个答案:

答案 0 :(得分:1)

如果您的照片文档具有在JavaScript中正确整理的“timestamp”元素,您可以创建一个简单的地图,将时间戳作为键发出,然后计算您要查询的窗口。

简单的视图图如下所示:

"mapname": "function(doc) { emit(doc.timestamp) }"

一旦你知道你所关注的照片的时间戳,你就必须生成 startkey endkey 参数设置到你想要的窗口。

CouchDB将返回包含构建网址到照片文档所需的_id值的行。

因此,对于时间戳为1332927024的图片,您的查询将为

http://couchdb/db/_design/designdocname/_view/mapname?startkey=1332926124&endkey=1332927924

答案 1 :(得分:0)

你的js将是你的地图功能,在Ektorp你编写并传递js map函数作为字符串(到我之前发布的代码)。您可以将当前时间作为milis,减去30分钟,并获得所需的时差(在java中)。然后你将mili时间传递给javascript。请记住,您的javascript函数是一个字符串,因此您只需将该字符串所需的差异附加到该字符串即可。您可以写如下:

String javaScriptFunction = "
    function(doc) {
      if(doc.created >" + timeDifferenceIneed + "){
       emit(doc.photoName, doc);
      }
    } " // of course ignored exiting characters

所以上面,timeDifferenceIneed你当前的时间 - 30分钟。然后将此字符串传递给上方并获取您的查询结果