检查MongoDB中是否存在具有字段值的文档的最佳做法是什么?

时间:2017-02-10 19:28:42

标签: php regex mongodb

我想知道检查用户名是否已注册的最佳做法是什么。例如,我注册为Peter,我想阻止其他用户使用:

  • PETER
  • 彼得
  • 彼得
  • 彼得
  • 彼得
你已经明白了。 我应该使用正则表达式在PHP中使用MongoDB进行不区分大小写的查询:

$username = 'Peter';
$db->users->count(['username' => new MongoDB\BSON\Regex('^'.$username.'\\b', 'i')]);

或者我应该为此目的存储2个版本的用户名,原始版本和一个小写版本?

$username = strtolower('Peter');
$query = $db->users->count(['username_lowercase' => $username]);
if ($query > 0) {
    echo 'This username is already used';
}

还是有其他方法吗?

1 个答案:

答案 0 :(得分:1)

关于绩效,最好的方法始终是测试,永远不会有偏见。

第三种方法是使用具有唯一约束的不区分大小写的索引。请参阅https://docs.mongodb.com/manual/core/index-case-insensitive/,我发现您的问题重复how to index a username in mongo with case-insensitively?