
MongoDB 自动增长
发布日期:2021-05-07 21:03:06
浏览次数:14
分类:精选文章
本文共 1579 字,大约阅读时间需要 5 分钟。
一、MongoDB 自动增长
MongoDB 没有像 SQL 一样有自动增长的功能, MongoDB 的 _id 是系统自动生成的12字节唯一标识。
但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。 由于 MongoDB 没有实现这个功能,我们可以通过编程的方式来实现,以下我们将在 counters 集合中实现_id字段自动增长。1.1 使用 counters 集合
考虑以下 products 文档。我们希望 _id 字段实现 从 1,2,3,4 到 n 的自动增长功能。
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles"}
为此,创建 counters 集合,序列字段值可以实现自动长:
>db.createCollection("counters")
现在我们向 counters 集合中插入以下文档,使用 productid 作为 key:
{ "_id":"productid", "sequence_value": 0}
sequence_value 字段是序列通过自动增长后的一个值。
使用以下命令插入 counters 集合的序列文档中:
>db.counters.insert({ _id:"productid",sequence_value:0})
1.2 创建 Javascript 函数
现在,我们创建函数 getNextSequenceValue 来作为序列名的输入, 指定的序列会自动增长 1 并返回最新序列值。在本文的实例中序列名为 productid 。>function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify( { query:{ _id: sequenceName }, update: { $inc:{ sequence_value:1}}, "new":true }); return sequenceDocument.sequence_value;}
1.3 使用 Javascript 函数
接下来我们将使用 getNextSequenceValue 函数创建一个新的文档, 并设置文档 _id 自动为返回的序列值:
>db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Apple iPhone", "category":"mobiles"})>db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Samsung S3", "category":"mobiles"})
就如你所看到的,我们使用 getNextSequenceValue 函数来设置 _id 字段。
为了验证函数是否有效,我们可以使用以下命令读取文档:
>db.products.find()
以上命令将返回以下结果,我们发现 _id 字段是自增长的:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月23日 17时02分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
5.Mybatis复杂映射开发
2021-05-08
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2021-05-08
环境配置 jdk_mysql_myeclipse8.6
2021-05-08
Session验证码的实现(2018-7-3)
2021-05-08
spring启动错误:Could not resolve placeholder
2021-05-08
日志写入xml上传ftp遇到的问题
2021-05-08
下载任意版本vmware对应的vmware tools
2021-05-08
将 github 中他人的 仓库 导入 码云中,从而 加快下载速度的 方式
2021-05-08
Java 类加载的过程 加载、验证、准备、解析、初始化
2021-05-08
JavaWeb---实现JavaBean来接收参数、请求转发、域对象
2021-05-08
瀚高数据库中 java代码类型与bit对应(APP)
2021-05-08
选择性估算器绕过行安全策略漏洞
2021-05-08
PostgreSQL中的触发器
2021-05-08
对PostgreSQL数据库结构的宏观理解
2021-05-08
Postgresql 日期和时间类型
2021-05-08
xmin、xmax、cmin、cmax
2021-05-08
查询某表格上次进行vacuum的时间
2021-05-08
invalid byte sequence for encoding
2021-05-08
Highgo Database故障收集脚本
2021-05-08
failed to initialize the database
2021-05-08