【发布时间】:2014-12-08 13:13:42
【问题描述】:
我正在尝试从“开头为”或使用相同的搜索键搜索多个字段中获得唯一的结果。
结果应该是原始文档之外的唯一子节点。
等效的 SQL 应该类似于:SELECT DISTINCT Name, Email FROM users WHERE Name LIKE 'key%' OR Email LIKE 'key%'
我的视图函数:
Map: function(doc){
if (doc.userDetails.firstName)
emit([doc.userDetails.firstName.toLowerCase(), doc.userDetails], null);
if (doc.userDetails.lastName)
emit([doc.userDetails.lastName.toLowerCase(), doc.userDetails], null);
}
Reduce: function(key, values, rereduce) {
return null;
}
问题在于,在键与每个用户文档的两个字段匹配的情况下,它会返回重复的结果。 例如:
JSON 文档:
{
"userDetails":{
"email": "johnny@domain.com",
"name": "John Smith"
},
"privateFields": { ... }
}
查询:myView?reduce=true&group=true&startkey=["joh"]&endkey=["joh\ufff0", {}]&inclusive_end=true
以上返回重复项,一次用于匹配电子邮件字段,另一次用于匹配名称字段。
有什么建议吗?
【问题讨论】:
-
我认为不可能在数据库端删除重复项。
标签: mapreduce couchdb unique cloudant