【问题标题】:CouchDB view to find users via case-insensitive emailCouchDB 视图通过不区分大小写的电子邮件查找用户
【发布时间】:2020-11-09 15:59:37
【问题描述】:

我的 _user 数据库中有一个 CouchDB 视图,我可以在其中根据用户的电子邮件地址找到用户(user.email 是他们用户文档的一部分)。

{
  "_id": "_design/find-user",
  "views": {
    "email->doc": {
      "map": "function (doc) {\n  emit(doc.email, doc);\n}"
    }
  },
  "language": "javascript"
}

我正在通过 PHP 使用以下 curl url 来访问匹配的用户:

curl_setopt($ch, CURLOPT_URL, $url . '/_users/_design/find-user/_view/email->doc?key="' . $email . '"');

这可行,但区分大小写,这是我不想要的。例如,我需要$email = TesT@example.com 在我的数据库中找到tESt@example.com

我尝试了以下方法,但这只会转换输出。

function (doc) {
  emit(doc.email.toLowerCase(), doc);
}

【问题讨论】:

    标签: php curl couchdb cloudant


    【解决方案1】:

    toLowerCase() 让您走在正确的轨道上。您唯一缺少的部分是您还必须转换搜索词。

    不要搜索"TEST@example.com",而是搜索strtolower("TEST@example.com")

    curl_setopt($ch, CURLOPT_URL, $url . '/_users/_design/find-user/_view/email->doc?key="' . strtolower($email) . '"');
    

    【讨论】:

    • 谢谢 :) 我需要它在所有方向上都不区分大小写。所以 TesT@example.com 必须找到 tESt@example.com 等。抱歉说得更具体了,我会更新我原来的帖子
    • 是的。我的回答提供了这一点。
    • 哇哦!这是否意味着test 找到TEST,但TEST 没有找到test?为什么会这样?
    • 我不明白你的意思。通过在两端标准化为小写,无论如何,您都会得到一个不区分大小写的匹配项。
    • emit 函数用于构建索引,然后搜索您提供的键。
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2013-11-10
    • 1970-01-01
    • 2018-06-28
    • 2020-09-15
    • 2012-04-06
    相关资源
    最近更新 更多