mongodb - 如何在mongodb中声明主键?在不知道它的价值的情况下创建索引
问题描述
嗨,我需要创建一个主键。
如果我插入{ "name":"test1", "age":10}
然后{ "name":"test1", "age":20}
.
如果我需要该名称作为主键,我需要创建一个索引:
db.collection.createIndex( { "name": "test1" }, { unique: true } )
但我认为这并不能解决问题,如果我插入 1000 个名称,每次插入后,我需要创建一个索引吗?有没有更好的解决方案?
谢谢
解决方案
如果我插入 1000 个名称,每次插入后,我需要创建一个索引吗?
不,你createIndex
只跑一次。
编辑: 除此之外,您正在以错误的方式创建索引。抱歉,在您对此答案发表评论后,我才注意到这一点。
创建唯一索引的正确语法是:
db.collection.createIndex( { "field_name": 1 }, { unique: true } )
后面"field_name":
的值不是字段本身的值,而是索引的方向。有可能:
* 1 : 上升
* -1 : 下降
因此,在您的情况下,您将执行以下操作来创建一个名称按升序排列的唯一索引:
db.collection.createIndex( { "name": 1 }, { unique: true } )
也就是说,您必须注意以下事项:
- 如果字段中已有重复内容,则唯一索引创建将失败
name
。因此,创建索引的最佳时间是在将文档添加到集合之前。 - 如果您插入不包含该字段的文档,则
name
对于第一个文档,"name": null
将自动创建一个字段。没有该字段的下一个文档将无法插入,因为预先存在带有 的文档"name": null
。
更多细节在这里