MongoDB 主键_id 改 id
在 MongoDB 中,每个文档(document)都有一个唯一标识符,称为主键(_id),用于唯一标识文档。默认情况下,_id 是一个 ObjectId 类型的字段,其值由 MongoDB 自动生成。但有时候我们希望使用自定义的字段作为主键,比如使用 id 字段作为主键。本文将介绍如何在 MongoDB 中将 _id 改为 id。
为什么要将 _id 改为 id
在某些情况下,我们可能希望使用自定义字段作为主键,而不是 MongoDB 自动生成的 ObjectId。比如,我们从其他数据库迁移数据到 MongoDB 中,原数据库的数据中已经有了一个唯一标识符 id,我们希望在迁移过程中保持一致性。又或者我们希望将主键字段改为较短的字段,减少存储空间。
将 _id 改为 id 的方法
要将 _id 改为 id,可以通过以下步骤实现:
1. 创建集合时设置主键
在创建集合时,可以通过指定文档的_id字段为 id,来将_id改为id。例如:
db.createCollection("myCollection", {
validator: { $jsonSchema: {
bsonType: "object",
required: [ "id", "name" ],
properties: {
id: {
bsonType: "int",
description: "must be an integer and is required"
},
name: {
bsonType: "string",
description: "must be a string and is required"
}
}
}}
})
2. 更新文档中的_id字段
如果已经存在的文档中需要将 _id 改为 id,可以通过更新操作实现。例如:
db.myCollection.find().forEach(function(doc) {
db.myCollection.update(
{ _id: doc._id },
{ $set: { id: doc._id } }
);
});
3. 删除原_id字段
最后,还需要删除原来的_id字段,以免造成混淆。例如:
db.myCollection.updateMany({}, { $unset: { _id: "" } });
序列图示例
下面是一个使用自定义 id 作为主键的序列图示例:
sequenceDiagram
participant Client
participant MongoDB
Client->>MongoDB: 创建文档 { id: 1, name: "Alice" }
MongoDB-->>Client: 返回成功
Client->>MongoDB: 查询文档 { id: 1 }
MongoDB-->>Client: 返回文档 { id: 1, name: "Alice" }
Client->>MongoDB: 更新文档 { id: 1, name: "Bob" }
MongoDB-->>Client: 返回成功
Client->>MongoDB: 删除文档 { id: 1 }
MongoDB-->>Client: 返回成功
结语
本文介绍了如何在 MongoDB 中将 _id 改为 id,以及为什么需要进行这样的操作。通过以上步骤,我们可以方便地实现使用自定义字段作为主键的需求。在实际应用中,根据具体情况选择最适合的方式来处理主键字段,以达到更好的数据管理和查询效果。