【发布时间】:2011-03-18 22:58:39
【问题描述】:
我想将我的一个字段设置为主键。我使用MongoDB 作为我的 NoSQL。
【问题讨论】:
标签: mongodb
我想将我的一个字段设置为主键。我使用MongoDB 作为我的 NoSQL。
【问题讨论】:
标签: mongodb
_id 字段是为 mongodb 中的主键保留的,应该是唯一值。如果你没有对_id 设置任何东西,它会自动用“MongoDB Id Object”填充它。但是您可以在该字段中输入任何独特的信息。
其他信息:http://www.mongodb.org/display/DOCS/BSON
希望对你有帮助。
【讨论】:
how to set one of my fields as primary key,例如:我希望 user_email 作为用户集合中的键,但是如何将该字段设置为键和唯一
MongoDB > Tutorial > Create an auto incrementing field - Archive
您还可以检查此链接并自动增加 _id 字段。
【讨论】:
实现此行为的一种方法是根据您要视为主键的自定义字段将值设置为 _id(在 MongoDB 中为主键保留)字段。
即,如果我希望 employee_id 作为主键,那么在 MongoDB 中创建文档时;将_id 赋值为与employee_id 相同的值。
【讨论】:
【讨论】:
在 mongodb 中,_id 字段是为主键保留的。如果您没有在对象中定义它,Mongodb 使用内部 ObjectId 值并创建索引以确保性能。
但是您可以为 _id 设置自己的唯一值,Mongodb 将使用它而不是为您创建一个。即使你想使用多个字段作为主键,你也可以使用一个对象:
{ _id : { a : 1, b: 1} }
在使用对象作为 id 时要小心,键的顺序(示例中的 a 和 b)很重要,如果交换它们,则会被视为不同的 id。
【讨论】:
{ _id: { _id: ...object id..., version: 4 }
如果您像 RDBMS 一样思考,则无法创建主键。默认主键是_id。 但是你可以创建Unique Index。示例如下。
db.members.createIndex( { "user_id": 1 }, { unique: true } )
db.members.insert({'user_id':1,'name':'nanhe'})
db.members.insert({'name':'kumar'})
db.members.find();
输出如下:
{ "_id" : ObjectId("577f9cecd71d71fa1fb6f43a"), "user_id" : 1, "name" : "nanhe" }
{ "_id" : ObjectId("577f9d02d71d71fa1fb6f43b"), "name" : "kumar" }
当您尝试插入相同的 user_id 时,mongodb 会引发写入错误。
db.members.insert({'user_id':1,'name':'aarush'})
写结果({ “n插入”:0, “写错误”:{ “代码”:11000, "errmsg" : "E11000 重复键错误集合:student.members index: user_id_1 dup key: { : 1.0 }" } })
【讨论】:
简单易用
db.collectionName.createIndex({urfield:1},{unique:true});
【讨论】:
这是创建主键的语法
db..createIndex(, { 唯一:真 })
假设我们的数据库有一个名为 student 的集合,并且它的文档有一个名为 student_id 的键,我们需要将其作为主键。那么命令应该如下所示。
db.student.createIndex({student_id:1},{unique:true})
您可以通过尝试向 student 集合添加重复值来检查此 student_id 是否设置为主键。
更多信息请参阅此文档https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index
【讨论】:
如果你在 Meteor 上使用 Mongo,你可以使用 _ensureIndex:
CollectionName._ensureIndex({field:1 }, {unique: true});
【讨论】: