首页 > 解决方案 > 如何在mongodb中声明主键?在不知道它的价值的情况下创建索引

问题描述

嗨,我需要创建一个主键。

如果我插入{ "name":"test1", "age":10} 然后{ "name":"test1", "age":20}.

如果我需要该名称作为主键,我需要创建一个索引:

db.collection.createIndex( { "name": "test1" }, { unique: true } )

但我认为这并不能解决问题,如果我插入 1000 个名称,每次插入后,我需要创建一个索引吗?有没有更好的解决方案?

谢谢

标签: mongodb

解决方案


如果我插入 1000 个名称,每次插入后,我需要创建一个索引吗?

不,你createIndex只跑一次。

编辑: 除此之外,您正在以错误的方式创建索引。抱歉,在您对此答案发表评论后,我才注意到这一点。

创建唯一索引的正确语法是:

db.collection.createIndex( { "field_name": 1 }, { unique: true } )

后面"field_name":的值不是字段本身的值,而是索引的方向。有可能:

* 1 : 上升

* -1 : 下降

因此,在您的情况下,您将执行以下操作来创建一个名称按升序排列的唯一索引:

db.collection.createIndex( { "name": 1 }, { unique: true } )

也就是说,您必须注意以下事项:

  1. 如果字段中已有重复内容,则唯一索引创建将失败name。因此,创建索引的最佳时间是在将文档添加到集合之前。
  2. 如果您插入不包含该字段的文档,则name对于第一个文档,"name": null将自动创建一个字段。没有该字段的下一个文档将无法插入,因为预先存在带有 的文档"name": null

更多细节在这里


推荐阅读