我的情况是我有一个User模式,其中包含一个名为“username”的唯一字段。同时,mongo自动创建自己的唯一键“_id。”
我注意到,对于我的很多模式,我需要一个“用户名”和“ids”数组。这有点多余,所以我的问题是:
通过“_id”查找比查找字段“username”更快(让我们说10个字符的字符串)?如果它们相同,是否可以使用我的唯一标识符用户名作为_id?
的值答案 0 :(得分:4)
如果您的数据自然具有必需的唯一字段,那么将该值用作_id
就可以了。
只要字段的数据大小与ObjectId(12字节)相当,那么性能应该相同。 10个字符的字符串是20个字节,因此用户名的索引将占用更多的内存,但可能不足以在性能方面产生差异。
由于您使用的是Mongoose,因此您还可以创建一个虚拟字段(名为username
),该字段使用更具描述性的名称公开_id
字段。
答案 1 :(得分:1)
我认为这很好,除非您将来改变用户名的结构。因此,我认为最好只使用ObjectId()作为ID,然后在需要时添加额外的字段username
。