【问题标题】:Can we use primary key in data (unique values) as _id field of MongoDB?我们可以使用数据中的主键(唯一值)作为 MongoDB 的 _id 字段吗?
【发布时间】:2015-11-15 22:54:27
【问题描述】:

假设,我有一个包含学生数据的 CSV 文件。数据中的列就像-

  1. Student_ID
  2. 学生姓名
  3. 地址

这里我有 Student_ID,它是主键,即在整个表中是唯一的。导入时可以在 MongoDB 中使用 Student_ID 作为 _id 字段吗?

如果是,那么 - 如何?

如果不是,那么 - 为什么?

【问题讨论】:

  • 您是否在询问是否可以在文档中使用Student_ID 字段而不是 _id? (换句话说,您的文档不会有 _id 字段,而是只有一个 Student_ID 字段?)
  • 是的,这就是我的意思。而不是另一个唯一值列_id,我可以简单地使用我的列Student_ID吗?

标签: mongodb mongodb-query pymongo mongo-shell mongoimport


【解决方案1】:

只需将Student_ID 作为值发送到您的插入命令中的_id key 喜欢:

db.class.insert({’_id’:'Student_ID_value', 'Student_Name':'MyNameHere'})

【讨论】:

  • 是的,这是一种方法,但为此我必须遍历 CSV 中的所有记录并逐个插入它们。使用 MongoDBImport 时有什么方法可以指定这样的东西吗?
【解决方案2】:

如果您使用 mongoimport 来导入您的 CSV 文件,那么您不能在命令中指定一种方法来用您的 Student_ID 字段覆盖 _id 字段。

因此,在导入时,MongoDB 会自动为每条记录创建一个_id 字段,并为其分配一个唯一的 ObjectID。对于插入,文档here 中提到了这一点:

如果文档没有指定 _id 字段,那么 MongoDB 会添加 _id 字段并为之前的文档分配一个唯一的 ObjectId 插入。大多数驱动程序创建一个 ObjectId 并插入 _id 字段, 但是如果驱动程序或 应用程序没有。

如果您的 CSV 文件已经包含 _id 字段,那么在导入时,_id 字段将被添加到集合中(连同您的 Student_ID、Student_Name 和地址字段)。


如果您希望 Student_ID 字段成为 _id 字段,则可以将 CSV 文件中的 Student_ID 列重命名为 _id,然后执行 mongoimport。


如果您真的只是想让您的Student_ID 字段表现 像主键一样,那么请考虑在 Student_ID 字段上创建一个unique index。这样,就像主键一样,不会出现重复值。例如:

db.<yourcollection>.createIndex( { "Student_ID": 1 }, { unique: true } )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2012-07-19
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多