我有一个数据库,我需要在其中获取一些值。该数据库由包含房间的文档组成,每个房间都有属性“楼层”和“酒店”(还有更多,但它们在这里并不重要)。
事情是;我需要得到我想要的酒店的所有楼层。 getAllFloorsOnHotel("hotel")
有点东西。但我不知道如何查询数据库。我在这里读过:http://guide.couchdb.org/editions/1/en/cookbook.html#unique ,但这并不完全是我所需要的。他们将 key 与group=true
一起使用来删除重复项,如果楼层是 key ,那么这将起作用,但在我的情况下,酒店是 key 。因此,如果我使用group=true
,我自然只能得到该酒店的一层。如果我不使用 group=true
,我会获取指定酒店的所有楼层 - 并有重复的楼层。
我怎样才能让 couchdb 给我返回酒店的所有楼层,而不重复?
最佳答案
您需要使用数组作为键。
在您的 map 函数中,您的发出应如下所示:
emit([doc.hotel, doc.floor], null);
我为该值设置了 null,但它可以是您想要用于您的归约函数的任何内容。要获取每家酒店的每个楼层的列表,您的reduce函数只需返回true即可。
然后,当您查询时,使用 group_level 而不是 group 并将其分配给您希望分组的数组级别。 group_level=2 将按楼层分组。
要使用curl查询您要去的房间:
curl -X GET http://localhost:5894/yourDB/yourView?group_level=2
这将为您提供所有酒店及其所有楼层。要获取特定酒店的列表,您需要查询范围。很难展示如何使用curl 执行此操作,因为您必须对数组字符串执行各种操作才能使其正常工作。您需要的变量是 startkey 和 endkey。无论如何,您可能正在使用 ajax,因此只需将它们作为选项传递即可。
startkey: ["hotelName", 0],
endkey: ["hotelName", {}],
group_level: 2
0 和 {} 只是低值和高值。 {} 排在最后,因此无论您的字符串是什么,都将位于这两者之间。
此外,如果您使用递减:true,则需要交换 0 和 {}。 (这给我带来了很大的痛苦)
关于javascript - CouchDB:获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999164/