有人可以向我解释如何使用数组和密钥过滤具有多个属性的文档吗?
例如,我有一个属性为a,b,c和d的文档。我想根据属性" a"中的用户选择值进行过滤。后来我想用属性" c"中的值来缩小结果范围。或者来自" d"。
的属性值有没有人有建议如何优雅地完成这项任务?
答案 0 :(得分:2)
假设您的文档如下:
{ 'a': 123, 'b': 456, 'c': 789, ... }
您可以创建如下视图:
function(doc){
emit([doc.a, doc.b, doc.c], doc)
}
然后,您可以使用startkey
和endkey
参数来访问视图,同时将结果限制为特定的子集:
...&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然后让您的客户端应用程序识别两个视图返回的文档。