【问题标题】:How to set a primary key in MongoDB?如何在 MongoDB 中设置主键?
【发布时间】:2011-03-18 22:58:39
【问题描述】:

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    _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 作为用户集合中的键,但是如何将该字段设置为键和唯一
    • 这如何回答这个问题??
    • _id 字段是默认索引,需要唯一。因此,将作为您的唯一约束的数据放入该字段中。 (docs.mongodb.com/master/indexes/#default-id-index)
    【解决方案2】:

    MongoDB > Tutorial > Create an auto incrementing field - Archive

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

    【讨论】:

    • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(与另一个中途停留的参考相比,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
    • 链接已损坏,因此此答案无用
    • 投反对票,因为页面现在重定向到:docs.mongodb.com/manual/crud,它既没有提到“自动”也没有提到“增量”。
    • 链接已断开,如其他 cmets 中所建议的那样。我更新了链接,现在它指向 The Wayback Machine 上 2013 年 8 月的页面快照。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      您可以在以下link找到更多信息

      我实际上发现这非常简单且易于实现。

      【讨论】:

      • "索引的唯一性约束确保只有一个文档可以为集合中的字段赋值。对于分片集合,这些唯一索引不能强制唯一性,因为插入和索引操作对于每个分片都是本地的" --docs.mongodb.org/manual/tutorial/…
      【解决方案5】:

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

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

      { _id : { a : 1, b: 1} }
      

      在使用对象作为 id 时要小心,键的顺序(示例中的 a 和 b)很重要,如果交换它们,则会被视为不同的 id。

      【讨论】:

      • 这很有趣。有什么理由我不能在“存档”集合上使用它来将我的文档的旧版本存储在另一个集合中? { _id: { _id: ...object id..., version: 4 }
      • @Robert _id 字段被索引并保存在内存中,因此基本上您将该集合的所有文档都保存在内存中。
      • 好吧,我相信 Mongo DB 会管理放入内存的“工作集”。我有点担心关键约束,但我在这里找到了答案:docs.mongodb.com/manual/reference/limits/…
      【解决方案6】:

      如果您像 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 }" } })

      【讨论】:

        【解决方案7】:

        简单易用

        db.collectionName.createIndex({urfield:1},{unique:true});
        

        【讨论】:

          【解决方案8】:

          这是创建主键的语法

          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

          【讨论】:

            【解决方案9】:

            如果你在 Meteor 上使用 Mongo,你可以使用 _ensureIndex:

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

            【讨论】:

              猜你喜欢
              • 2014-05-24
              • 1970-01-01
              • 2011-12-04
              • 1970-01-01
              • 2013-10-12
              • 2021-08-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多