如何在MongoDB中设置主键?

时间:2010-07-21 12:04:31

标签: mongodb

我想将我的一个字段设置为主键。我使用MongoDB作为我的NoSQL。

9 个答案:

答案 0 :(得分:75)

_id字段保留给mongodb中的主键,并且应该是唯一值。如果您未向_id设置任何内容,它将自动用“MongoDB Id Object”填充它。但您可以将任何唯一信息添加到该字段中。

其他信息:http://www.mongodb.org/display/DOCS/BSON

希望它有所帮助。

答案 1 :(得分:17)

另一种方法是为您的收藏集创建Indexes,并确保它们是唯一的。

您可以在以下link

上找到更多信息

我实际上发现这很简单,易于实现。

答案 2 :(得分:12)

在mongodb中_id字段保留给主键。 Mongodb使用内部ObjectId值,如果您没有在对象中定义它,并创建索引以确保性能。

但你可以为_id设置自己独特的价值,Mongodb将使用它而不是为你制作一个。即使您想使用多个字段作为主键,也可以使用对象:

1 is True

在创建这些ID时要小心,键的顺序(示例中的a和b)很重要,如果你交换它们,它会被认为是另一个对象。

答案 3 :(得分:5)

如果您认为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 trow写入错误。

db.members.insert({'user_id':1,'name':'aarush'})

写结果({     " nInserted" :0,     " writeError" :{         "代码" :11000,         " ERRMSG" :" E11000重复键错误集合:student.members index:user_id_1 dup key:{:1.0}"     } })

答案 4 :(得分:5)

简单,您可以使用db.collectionName.createIndex({urfield:1},{unique:true});

答案 5 :(得分:2)

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

您还可以查看此链接并自动增加_id字段。

答案 6 :(得分:2)

实现此行为的一种方法是根据您要将其视为主键的自定义字段,将值设置为_id(为MongoDB中的主键保留)字段。
即如果我想要employee_id作为主键,那么在MongoDB中创建文档时;指定与_id相同的employee_id值。

答案 7 :(得分:2)

这是创建主键的语法

  

分贝&LT。 collection> .createIndex(< key and index type specification>,{   unique:true})

让我们假设我们的数据库有名为学生的集合,并且它的文档具有名为 student_id 的密钥,我们需要将其作为主键。那么命令应该如下所示。

$array['content']['content']['content'] = array();
$content3 = &$array['content']['content']['content'];

$content3['content4'] = 'something';

您可以尝试将重复值添加到学生集合中,检查此 student_id 是否设置为主键。

更喜欢此文档以获取更多信息https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index

答案 8 :(得分:2)

如果您在Meteor上使用Mongo,则可以使用_ensureIndex

CollectionName._ensureIndex({field:1 }, {unique: true});