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

标签 php regex mongodb

我想知道检查用户名是否已注册的最佳做法是什么。例如,我注册为 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';
}

或者还有其他方法吗?

最佳答案

关于性能,最好的方法是始终进行测试并且永远不要有偏见。

第三种方法是使用具有唯一约束的不区分大小写的索引。参见 https://docs.mongodb.com/manual/core/index-case-insensitive/哦,我找到了你的问题的副本 how to index a username in mongo with case-insensitively?

关于php - 检查 MongoDB 中是否存在具有字段值的文档的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167220/

相关文章:

php - 加载 spark 库时 Codeigniter 404 页面抛出错误

javascript - 自定义 javascript 正则表达式的问题

c# - 通过将参数视为文本来设置正则表达式模式

regex - 正则表达式匹配所有内容,直到最后一次出现/

mongodb - 如何解决 MongoDB 当前每个集合只有一个地理空间索引的限制?

mongodb - 在两个不同的集合中生成重复的 Mongo ObjectId 的可能性?

json - Apache Spark 和 MongoDB Hadoop-Connector 创建的 BSON 结构

php - 更新随机选择的行

PHP 5.6 : headers_sent intermittently returns true, 空文件名和第 0 行

php - 2 Mysql查询行数和主查询?