我在couchdb中有文档。该模式看起来象下面这样:Deduplicaton /在Couchdb中的匹配?
userId
email
personal_blog_url
telephone
我假定两个用户实际上是相同的人,只要他们有
- 电子邮件或
- personal_blog_url或
- 电话
相同。
我有3次创造,基本上电子邮件/ BLOG_URL /电话映射到用户id,然后在同一项下结合的userIds成团,例如,
_view/by_email:
----------------------------------
key values
[email protected] [123, 345]
[email protected] [23, 45, 333]
_view/by_blog_url:
----------------------------------
key values
http://myblog.com [23, 45]
http://mysite.com/ss [2, 123, 345]
_view/by_telephone:
----------------------------------
key values
232-932-9088 [2, 123]
000-111-9999 [45, 1234]
999-999-0000 [1]
我的问题:
- 如何将3个不同视图的结果合并到不包含重复项的最终用户表/视图中?
- 或者是否在couchdb中执行重复数据删除是一种好的做法?
- 或者什么是在沙发上执行重复数据删除的好方法呢?
PS。在最后的观点中,假设所有愚蠢的,我们只保留最小的userId。
谢谢。
谢谢Marcin。我认为你的想法很有效。直到最后一步,我才获得成功 - 使用多个键进行搜索。如果我设置'keys = [[1,“a @ b.com”],[2,“http://a.com”],[3,“334-333-2323”]]',我总是得到所有文件都符合结果。也许我应该问一个关于这个stackoverflow的新问题? – greeness
我不确定“所有文件”是什么意思。如果不使用reduce(只是map),你应该用'“rows”得到响应JSON记录:[{“id”:“1”,“key”:[1,“some @ email”],“value”:“1 “},{”id“:”2“,”key“:[1,”some @ email“],”value“:”2“},...}]'包含电子邮件,或电话号码。和你的新纪录一样。你有没有得到一些非这些领域匹配的文件?请注意,对于只是地图(没有减少)的文件将不会按用户ID排序。 –
我假设'?keys = [[1,“a @ b.com”],[2,“http://a.com”],[3,“334-333-2323”]]是一个倍数键查询。我得到的结果包含一些没有这些字段匹配的文档。如果我只做单键查询,结果是正确的。多键查询有问题吗?顺便说一句,我使用的是couchDB 1.0.1。 – greeness