使用唯一字符串代替MongoId作为_id有什么缺点吗?


Are there any downsides of using a unique string instead of MongoId as an _id?

我有一个用户集合,显然所有的登录都是唯一的,在这一点上,我想不出不使用它们而不是默认生成的MongoId的理由。这种方法有什么缺点吗?

听起来很不错。objectid在进行分片时很有用,它提供了一个内置的时间戳,而且对于索引和存储来说可能更有效,因为它们的大小都是相同的。但是,如果您的应用程序使用login更有意义,那么应该可以正常工作。

如果你的登录也是电子邮件地址,因为他们经常是,在某些时候你的用户会改变他们的电子邮件地址,这会给你带来问题,如果你使用它作为_id。即使你不使用电子邮件地址登录,你可能仍然希望允许用户更改他们的用户名。

但是我要问的问题是,而不是使用登录作为_id有任何缺点,是:只是使用标准ObjectId字段有任何缺点吗?您希望通过使用登录来获得什么?

正如Tyler Brock在他的回答中指出的那样,使用ObjectId会给您带来一些额外的好处,因为在ObjectId中编码了一些额外的信息,例如时间戳和创建文档的MongoDB实例的标识符。也许有一天会有用的。

根据我的经验,除非(有时甚至如果有很好的理由不这样做,否则通常情况下,无论使用什么技术,最好还是顺其自然。