如何过滤couchdb中的文档属性?

时间:2014-06-19 16:35:47

标签: couchdb nosql

有人可以向我解释如何使用数组和密钥过滤具有多个属性的文档吗?

例如,我有一个属性为a,b,c和d的文档。我想根据属性" a"中的用户选择值进行过滤。后来我想用属性" c"中的值来缩小结果范围。或者来自" d"。

的属性值

有没有人有建议如何优雅地完成这项任务?

1 个答案:

答案 0 :(得分:2)

假设您的文档如下:

{ 'a': 123, 'b': 456, 'c': 789, ... }

您可以创建如下视图:

function(doc){
   emit([doc.a, doc.b, doc.c], doc)
}

然后,您可以使用startkeyendkey参数来访问视图,同时将结果限制为特定的子集:

...&startkey=[123,]&endkey=[123,{}] // Shows all results with doc.a=123
...&startkey=[123,]&endkey=[123,456] // Shows all results with doc.a=123 and doc.b<=456

但是,所有元素都将在一个列表中排序,您可以访问的所有元素都是此列表的子部分。因此,如果要访问123&lt; = doc.a&lt; = 456和123和456之间doc.b的文档,则必须创建两个单独的视图,一个用于doc.a,另一个用于doc。 b然后让您的客户端应用程序识别两个视图返回的文档。