如何使用复合键查询couchdb视图?

Sre*_*ppa 5 python couchdb composite-key

我有一个couchdb视图"record_by_date_product",其定义如下:

function(doc) {
  emit([doc.logtime, doc.product_id], doc);
}
Run Code Online (Sandbox Code Playgroud)

我试图运行一个类似的查询:

(logtime > fromdate & logtime < todate)  & product_id in (1,2,6)
Run Code Online (Sandbox Code Playgroud)

这种观点有可能吗?

我也使用couchdb python库来访问couchdb.这是一段代码:

server = couchdb.Server()
db = server['mydb']

results = db.view('_design/record_by_date_product/_view/record_by_date_product')
Run Code Online (Sandbox Code Playgroud)

此页面http://packages.python.org/CouchDB/client.html#viewresults指定我们可以使用startkey和endkey.但我无法让它发挥作用.

谢谢

Sre*_*ppa 5

我想我刚刚找到了确切的答案:

设计一个视图'sampleview',如:

{
   "records_by_date_product": {
       "map": "function(doc) {\n  emit([doc.prod_id, doc.logtime], doc);\n}"
   }
}
Run Code Online (Sandbox Code Playgroud)

我们假设查询参数是:

prod_id in [1,3]
from_date = '2010-01-01 00:00:00'
to_date = '2010-01-02 00:00:00'
Run Code Online (Sandbox Code Playgroud)

然后,您必须在同一视图上运行2个单独的查询:

http://localhost:5984/db/_design/sampleview/_view/records_by_date_product?startkey='\["1,2010-01-01%2000:00:00"\]'&endkey='\[1,"2010-01-02%2000:00:00"\]'

http://localhost:5984/db/_design/sampleview/_view/records_by_date_product?startkey='\[2,"2010-01-01%2000:00:00"\]'&endkey='\[2,"2010-01-02%2000:00:00"\]'
Run Code Online (Sandbox Code Playgroud)

请注意,除了在第二个查询中更改prod_id之外,每次都运行相同的查询.结果必须在以后整理.希望这可以帮助!

  • 你只有一个人,对吗?你刚刚回答了自己的问题并说"希望这会有所帮助".无论如何,这是行不通的,因为键的顺序是错误的.`[start_date,1]`和`[end_date,1]`之间的范围将包含很多你不想要的东西,比如产品id = 2的日期范围内的所有东西.如果您在日期之前发出产品ID,则**将起作用. (2认同)