CouchDB:获取唯一值

CouchDB: Get unique values

本文关键字:唯一 获取 CouchDB      更新时间:2023-09-26

我有一个数据库,需要在其中获取一些值。该数据库由包含房间的文件组成,每个房间都有"楼层"answers"酒店"(还有一些,但它们在这里并不重要)。

问题是;我需要把我要的酒店的所有楼层都安排好。getAllFloorsOnHotel("hotel")之类的东西。但是我不知道如何查询数据库。我在这里读到:http://guide.couchdb.org/editions/1/en/cookbook.html#unique,但这不是我所需要的。在那里,他们将密钥与group=true一起使用来删除重复项,如果地板是密钥,这将起作用,但在我的情况下,酒店是密钥。因此,如果我使用group=true,我自然只能在那家酒店住一层。如果我不使用group=true,我会取回指定酒店的所有楼层——有重复的楼层。

我如何才能让couchdb让我回到酒店的所有楼层,而不重复?

您需要为键使用一个数组。

在你的地图功能中,你的发射应该是这样的:

emit([doc.hotel, doc.floor], null);

我为该值设置了null,但它可以是您想用于reduce函数的任何值。要获得每个酒店的每个楼层的列表,您的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和{}。(这让我很痛苦)

这里有更多信息:CouchDB在同一视图中排序和过滤