Couchdb 如何查询多个关键条件?

Couchdb 如何查询多个关键条件?,couchdb,Couchdb,使用couchdb,使用以下json: {"total_rows":3,"offset":0,"rows":[ {"id":"bc26e5eae7f8c8c3486818e7e7971df0","key":{"user":"lili@abc.com","pal":["igol ≠ eagle"],"fecha":"10/5/2014"},"value":null},{"id":"cf0dc2e2874776958c59f2f544b5a750","key":{"user":"lili@abc.c

使用couchdb,使用以下json:

{"total_rows":3,"offset":0,"rows":[ {"id":"bc26e5eae7f8c8c3486818e7e7971df0","key":{"user":"lili@abc.com","pal":["igol ≠ eagle"],"fecha":"10/5/2014"},"value":null},{"id":"cf0dc2e2874776958c59f2f544b5a750","key":{"user":"lili@abc.com","pal":["kat ≠cat"],"fecha":"10/6/2014"},"value":null},{"id":"df4ec96088ed52096db064f2ebd2310b","key":{"user":"dum@ghi.com","pal":["dok ≠ duck"],"fecha":"10/7/2014"},"value":null}]}
我想查询具体用户和具体日期:

例如: ?用户=”lili@def.com“&fecha:“10/6/2014”

我还尝试: ?用户%3Dlili%40def.com%26fecha%3A10%2F6%2F2014

不用说,它目前并没有像我预期的那样工作(所有结果都显示出来,而不仅仅是所需的寄存器)

我的观点是:

function(doc) {

    if (doc.USER){

        emit({user:doc.USER, pal:doc.palabras, fecha:doc.fecha});  

    }
}

注意。

请记住,CouchDB视图只是在索引时而不是查询时生成的键/值查找。此时您正在发射一个没有值的键。如果要通过两个值查找某个对象,则需要发出一个复合键(数组):

然后,通过将数组作为键传递,可以查找匹配的文档:

?key=%5B%22lili%40def.com%22%2C%20%2210%2F6%2F2014%22%5D

您可以对此进行优化(例如,发出一个
null
值并使用
include\u docs
来减小视图的大小),但这会让您走上正确的道路。

我做的事情与
antp
相同,但我倾向于使用字符串

function ( doc ) {
  if ( doc.USER ) {
    emit( 'user-' + doc.USER + '-' + doc.fecha, doc );
  }
}
我还强烈建议将
null
而不是
doc
作为值发出

记住,根据您需要的查询类型,您总是可以发出多次查询

例如,如果您正在查找特定用户在两个日期之间发布的所有帖子,您可以执行以下视图

function ( doc ) {
  if ( doc.type == "post" ) {
    emit( 'user-' + doc.nombre, null );
    emit( 'fecha-' + doc.fecha, null );
  }
}
然后您将查询两次视图
\u view/posts?key=“user miUsario”
,以及
\u view/posts?start\u key=“fecha-1413040000000”&end\u key=“fecha-1413049452904”
。然后,一旦您从两个视图中获得了所有的
id
s,您就可以使用交叉点并使用_all_docs来获取原始文档


您最终提出了三个请求,但这节省了视图中的磁盘空间,有效负载更小,因为您返回
null
,代码更简单,因为您可以通过多种方式查询同一视图。

非常感谢,有价值的建议谢谢。我仍然在锻炼我的大脑(以前使用mysql,并试图“让couchdb”像以前一样工作)。当做
function ( doc ) {
  if ( doc.type == "post" ) {
    emit( 'user-' + doc.nombre, null );
    emit( 'fecha-' + doc.fecha, null );
  }
}