使用自定义唯一键替换mongodb中的“_id”字段会降低性能吗?

时间:2013-12-08 00:41:18

标签: mongodb mongoose

我的情况是我有一个User模式,其中包含一个名为“username”的唯一字段。同时,mongo自动创建自己的唯一键“_id。”

我注意到,对于我的很多模式,我需要一个“用户名”和“ids”数组。这有点多余,所以我的问题是:

通过“_id”查找比查找字段“username”更快(让我们说10个字符的字符串)?如果它们相同,是否可以使用我的唯一标识符用户名作为_id?

的值

2 个答案:

答案 0 :(得分:4)

如果您的数据自然具有必需的唯一字段,那么将该值用作_id就可以了。

只要字段的数据大小与ObjectId(12字节)相当,那么性能应该相同。 10个字符的字符串是20个字节,因此用户名的索引将占用更多的内存,但可能不足以在性能方面产生差异。

由于您使用的是Mongoose,因此您还可以创建一个虚拟字段(名为username),该字段使用更具描述性的名称公开_id字段。

答案 1 :(得分:1)

我认为这很好,除非您将来改变用户名的结构。因此,我认为最好只使用ObjectId()作为ID,然后在需要时添加额外的字段username