我目前正在使用 MongoDB,我需要为添加到集合中的新文档实现自动递增字段(如“id”)。最新的 MongoDB 版本中是否有支持此功能的内置功能,或者我是否需要实施解决方法?
MongoDB本身不支持自动递增字段。但是,您可以通过使用专用计数器集合和 MongoDB 原子 findAndModify 或 findOneAndUpdate 操作的手动解决方法来实现此功能。
第 1 步:创建计数器集合 创建一个名为 counters 的集合来存储每个需要自动递增字段的集合的序列值。例如:
{
"_id": "myCollection", // Identifier for the collection that needs auto-increment
"seq": 0 // Current sequence value
}
插入您要跟踪的集合的初始文档:
db.counters.insertOne({ _id: "myCollection", seq: 0 })
第 2 步:自动递增计数器 使用 findAndModify 或 findOneAndUpdate 操作以原子方式递增序列号。这确保了线程安全并避免竞争条件。
命令示例:
db.counters.findOneAndUpdate(
{ _id: "myCollection" }, // Match the specific counter
{ $inc: { seq: 1 } }, // Increment the `seq` field by 1
{ returnDocument: "after" } // Return the updated document
)
这将增加 seq 字段并返回更新后的值。输出将如下所示:
{
"_id": "myCollection",
"seq": 1
}
第 3 步:使用增量值 检索递增的 seq 值后,您可以将其用作目标集合中的“id”或任何自动递增字段。
例如,将新文档插入到目标集合中:
db.myCollection.insertOne({
_id: 1, // Use the auto-incremented value
name: "Document 1" // Other fields
})