javascript - CouchDB:获取唯一值

标签 javascript couchdb

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

事情是;我需要得到我想要的酒店的所有楼层。 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 和 {}。 (这给我带来了很大的痛苦)

这里还有更多信息: CouchDB sorting and filtering in the same view

关于javascript - CouchDB:获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999164/

相关文章:

javascript - Object.assign 和 just assign 的区别

url-rewriting - CouchDB:使用重写查询带有键的 View 时遇到问题

CouchDB:max_replication_retry_count 和 retries_per_request 之间的区别

javascript - 只有在缓冲完整的视频后才开始播放 HTML5 视频

javascript - 验证 jquery.validate.min.js 中的 url

javascript - Angular 选择 - 带有 JSON 对象的选项值

javascript - 加载html后将js文件从assets加载到webview

json - 使用CouchDB提供HTML

ruby-on-rails - 将 CouchDB 作为 Rails 应用程序的一部分分发?

CouchDB:无法正常启动CouchDB