使用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"&安培;出生日期:&#34 10 /2014分之6"
我也尝试过: ?用户%3Dlili%40def.com%26fecha%3A10%2F6%2F2014
毋庸置疑,它目前还没有按照我的预期运行(所有结果都显示出来,而不仅仅是所需的寄存器)。
我的观点功能是:
function(doc) {
if (doc.USER){
emit({user:doc.USER, pal:doc.palabras, fecha:doc.fecha});
}
}
问候。
答案 0 :(得分:2)
请记住,CouchDB视图只是在索引时而非查询时构建的键/值查找。在你发出没有价值的钥匙的那一刻。如果你想用两个值来查找,你需要发出一个复合键(一个数组):
function(doc) {
if (doc.USER) {
emit([doc.USER, doc.fecha], doc);
}
}
然后,您可以通过将数组作为键来查找匹配的文档:
?key=%5B%22lili%40def.com%22%2C%20%2210%2F6%2F2014%22%5D
您可以对此进行优化(例如,发出null
值并使用include_docs
来缩小视图的大小)但这应该会让您走上正确的轨道。
答案 1 :(得分:0)
我和Ant P
做同样的事情,但我倾向于使用字符串。
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 );
}
}
然后,您将查看视图两次_view/posts?key="user-miUsario"
和_view/posts?start_key="fecha-1413040000000"&end_key="fecha-1413049452904"
。然后,一旦您从两个视图中获得了所有id
,就可以使用_all_docs来获取原始文档。
您最终会发出三个请求,但它会在视图中节省磁盘空间,因为您返回null
,所以有效负载较小,而且您的代码更简单,因为您可以通过多种方式查询同一视图。