Filter couchdb-为发出非唯一两个数组键的视图检索唯一文档
我在CouchDB的视图中有一个map函数,它为Filter couchdb-为发出非唯一两个数组键的视图检索唯一文档,filter,pagination,couchdb,mapreduce,Filter,Pagination,Couchdb,Mapreduce,我在CouchDB的视图中有一个map函数,它为message类型的文档发出非唯一的两个数组键,例如 数组键中的第一个位置是用户id,第二个位置表示用户是否已读取消息 这很好,因为我可以设置include_docs=true并检索实际文档。但是,在这种情况下,我将检索重复的文档,正如您在上面的视图结果中所看到的那样。我需要能够编写一个可以查询的视图,以返回给定用户已读取的唯一消息。此外,我需要能够有效地对结果集进行分页 请注意,在上图中,[66,true]对于文档id 26a9a271de3a
message
类型的文档发出非唯一的两个数组键,例如
数组键中的第一个位置是用户id,第二个位置表示用户是否已读取消息
这很好,因为我可以设置include_docs=true
并检索实际文档。但是,在这种情况下,我将检索重复的文档,正如您在上面的视图结果中所看到的那样。我需要能够编写一个可以查询的视图,以返回给定用户已读取的唯一消息。此外,我需要能够有效地对结果集进行分页
doc.\u id
,并使用group\u level=exact
减少,结果是:
现在我可以获得唯一的文档ID,但是如果不进行第二次查询,我就无法获得文档。即使是在第二个查询的情况下,像这样进行分页也需要很多复杂性(至少我认为是这样)提前感谢。请参阅@wickedrey对问题的评论。解决方案是确保我不会为一个文档发出两次相同的键。我在map函数中执行此操作,方法是在阵列中发射关键点时跟踪这些关键点,然后在阵列中存在关键点时跳过发射。能否显示地图和缩小函数?不清楚为什么不能将映射函数更改为不发射重复项。@WicketdGrey我想这可能是答案。@WicketdGrey是正确的,我问题的解决方案是确保我发射了唯一的密钥。我这样做是通过跟踪为每个文档发出的键,并确保不会多次发出一个键。这应该是显而易见的,但我正在学习:)。