具有多个键值的CouchDB视图查询

时间:2011-04-06 18:52:08

标签: couchdb

我目前正在尝试创建一个视图和查询以适应此SQL查询:

SELECT * FROM articles
WHERE articles.location="NY" OR articles.location="CA"
ORDER BY articles.release_date DESC

我尝试使用复杂的密钥创建视图:

function(doc) { 
  if(doc.type == "Article") { 
    emit([doc.location, doc.release_date], doc) 
  }
}

然后使用 startkey endkey 检索一个位置并在发布日期对结果进行排序。

.../_view/articles?startkey=["NY", {}]&endkey=["NY"]&limit=5&descending=true

这很好用。

但是,如何将多个启动键和结束键发送到我的视图以模仿

WHERE articles.location="NY" OR articles.location="CA"

2 个答案:

答案 0 :(得分:7)

我的主要克星,多米尼克,是对的。

此外,按标准A查询永远不可能,然后按CouchDB中的条件B排序。为了解决这种不便,CouchDB保证了可扩展,可靠,对数的查询时间。你有一个选择。

  • 将视图输出存储在自己的数据库中,并创建一个新视图以按条件B排序
  • ,然后对行进行排序,也可以是
    • 在收到行
    • 后对客户端进行排序
    • _list函数中对服务器端进行排序。这很棒,但请记住它不是最终可扩展的。如果您有数百万行,_list函数可能会崩溃。

答案 1 :(得分:5)

简短的回答是,您目前不能使用多个startkey / endkey组合。

您要么必须进行2次单独查询,要么始终可以添加lucene搜索引擎以获得更强大的搜索功能。

可以在查询中使用多个key参数。请参阅Couchbase CouchDB documentation on multi-document fetching