couchdb搜索或过滤关键数组

Mat*_*att 24 arrays couchdb key view arraylist

我在我的视图功能中有这个:

emit([doc.address.country,doc.address.state, doc.address.city], doc);
Run Code Online (Sandbox Code Playgroud)

当我查询搜索时,我需要填充数组的所有3个元素,例如:

?key=["US","NY","New York"]
Run Code Online (Sandbox Code Playgroud)

这将产生我的记录,但举例来说,我只想返回美国的所有内容,例如:

?key=["US"]   
Run Code Online (Sandbox Code Playgroud)

或者在美国和州......

?key=["US","NY"] 
Run Code Online (Sandbox Code Playgroud)

或者...让我们说也许我只想要来自纽约的所有记录...(我知道以下不起作用)

?key=["","NY"]
Run Code Online (Sandbox Code Playgroud)

如果你想将数组中的一个元素留空,我真的不知道如何搜索?

oku*_*row 44

第一:

key = ["US"]不适用于数组键["US","NY"],因为您正在寻找一个完全["US"]的键.相反,你必须使用

startkey=["US"]&endkey=["US",{}] 
Run Code Online (Sandbox Code Playgroud)

那些键在结果集中:

["DE","Bavaria","Munich"]   <---- NO ! "DE" is out of Range of startkey
["US","FL","Miami"]         <---- YES, starts with "US"
["US","NY","New York"]      <---- YES, starts with "US"
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey
Run Code Online (Sandbox Code Playgroud)

还工作:

startkey=["US","FL"]&endkey=["US","FL",{}] 
Run Code Online (Sandbox Code Playgroud)

结果:

["DE","Bavaria","Munich"]   <---- NO ! "DE" is out of Range of startkey
["US","FL","Miami"]         <---- YES, starts with "US","FL"
["US","NY","New York"]      <---- NO, "US","NY" is out of Range of endkey
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey
Run Code Online (Sandbox Code Playgroud)

第二: 你不能在左侧有空白..所以你必须写一些更多的发射:(如果你不需要查询,你不必发出第二和第三个数组项)

查看"byStateCityCountry":

emit([doc.address.state, doc.address.city,address.country], doc);
Run Code Online (Sandbox Code Playgroud)

查看"byCityStateCountry":

emit([address.city,doc.address.state, doc.address.country], doc);
Run Code Online (Sandbox Code Playgroud)

只需在第一个位置放置一个标志来确定查询类型,这样就可以在一个视图中执行所有操作:

emit([1,address.country,doc.address.state, doc.address.city], doc);
emit([2,doc.address.state, doc.address.city,address.country], doc);
emit([3,address.city,doc.address.state, doc.address.country], doc);
Run Code Online (Sandbox Code Playgroud)

用法:

?startkey=[1,"US"]&endkey=[1,"US",{}]
?startkey=[2,"FL"]&endkey=[2,"FL",{}]
?startkey=[3,"Miami"]&endkey=[3,"Miami",{}]
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是旧的,但也应该注意,如果你的关键数组有很多元素,它会变得更复杂.使用这些键在视图中假设以下数据:`startkey == [a,11] and endkey == [c,11]:``[a,10],[a,11] < - startkey,[a ,12,[b,10],[b,11],[b,12],[c,10],[c,11] < - endkey,[c,12]`(中间的一切)将返回startkey和end键.). (2认同)