我有一个非常简单的Mongo数据库用于个人nodejs项目。它基本上只是注册用户的记录。
我最重要的字段是一个字母数字字符串(让我们称之为user_id,并假设它只能是数字),大约15到20个字符。
现在最重要的操作是检查用户是否存在。我这样做是通过查询db.collection.find("user_id": "testuser-123")
如果没有记录返回,我会保存用户以及其他一些不太重要的数据,如名字,姓氏和注册日期。
现在我显然想让user_id
成为一个索引。
我在official MongoDB Manual上阅读了索引教程。
首先我尝试设置text index,因为我认为这符合字母数字字段。我也尝试过设置language:none
。但事实证明,我的查询在大约12毫秒内返回,而不是在没有索引的情况下返回6毫秒。
然后我尝试设置一个有序的索引,如{user_id: 1}
,但我没有看到任何差异(它是否只适用于数值?)。
任何人都可以向我推荐此案例的最佳索引类型或最快查询以检查用户是否存在?或者MongoDB可能不是最适合的?
答案 0 :(得分:1)
首先是一些随意的想法:
根据您的用例,我认为正确的索引是unique index。这是一个有序的索引,可以防止插入两个相同的文档。
在您的应用程序中,在插入之前不进行测试。在实际应用中,当您有并发插入时,这可能会导致竞争条件。如果您使用唯一索引,只需尝试插入 - 并准备好优雅地处理由重复键引起的错误。