_id字段是MongoDB中一个特殊的字段,它的类型为BSON ObjectId。它是每条记录的第一个属性,并且该属性值必须唯一。
BSON ObjectId长12个字节,包含4字节的时间戳、3字节的机器id、2字节的进程id以及3字节长的计数器。它的结构如下图所示:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
time |
machine |
pid |
inc |
我们使用命令行查找某一条记录时,通常结果呈现如下的格式:
{ _id : ObjectId( "47cc67093475061e3d95369d" ) , name : "joe" }
这样的_id值对于用户来说是没有意义的,尤其是在REST的架构中,URI通常是可读的,如果将这串值放入URI,那么URI的可读性将大打折扣。
传统的关系数据库例如mysql,可以将主键设为increment,实现主键从0开始的自动增长,这样的id值,才是可读的,有意义的。MongoDB如何实现_id字段的从0自动增长?我查阅了官方的文档,没有找到答案,于是自己实现了一套折中的方案。
在插入一条新记录的时候,我们可以通过如下操作,来维护_id的自动增长。
- 首先让我们来完成一些准备工作,读取一个json字符串、获取集合:
BasicDBObject obj = (BasicDBObject) JSON.parse(json);
col = db.getCollection(collection);
DBCursor cursor=col.find().sort(new BasicDBObject("$natural",-1)).limit(1);
- 如果查询结果为空,置_id值为0,反之,置_id为集合内最大的_id再加1:
if(cursor.hasNext()){
obj.put("_id", Integer.parseInt(cursor.next().get("_id").toString())+1);
}else{
obj.put("_id", 0);
}
col.insert(obj);
让我们来看一下效果,注意红笔划出的地方。
至此,我们就实现了维护_id字段的自动增长。
- 大小: 2 KB
分享到:
相关推荐
在Java开发中,MongoDB常被用于处理结构化和半结构化的数据。本篇文章将深入探讨MongoDB如何进行文件存储,特别是针对大文件的处理。 首先,MongoDB提供了GridFS(Grid File System)规范,这是一个用于存储和检索...
- 数据模型:定义Java对象作为MongoDB文档的映射,使用`@Document`注解标记类,使用`@Id`注解指定主键字段。 3. **MQTT协议**: - MQTT简介:MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/...
MongoDB有广泛的驱动程序库,支持多种编程语言,如Java、Python、Node.js等,方便开发者集成到各种应用程序中。 14. 社区与生态系统: MongoDB拥有活跃的社区,提供丰富的文档、教程和第三方工具,帮助用户解决...
MongoDB中的每个文档都有一个唯一的主键_id字段,通常是用ObjectId()生成的。书中会通过示例来讲解如何设置_id字段。 查询和更新文档是MongoDB中常见的操作。find()方法用于查询文档,MongoDBCursor则用于处理查询...
MongoDB在Java中被广泛用于构建高性能、可扩展的数据存储解决方案。MongoDB是一个NoSQL数据库,以其灵活性、可伸缩性和高性能而闻名。在Java中使用MongoDB,我们可以借助Spring Data MongoDB框架,它提供了一种简化...
缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度。是什么引起我写这篇文章呢,这...
在Java代码中,可以通过以下方式创建MongoDB连接: ```java import com.mongodb.Mongo; Mongo mongo = new Mongo(); ``` 默认情况下,该连接指向本地主机上的MongoDB服务,端口号为27017。 ##### 2.2 获取数据库...
以下将详细介绍如何在Java环境中,特别是使用Spring Boot 2,来配置和使用MongoDB的字段级加密。 首先,我们需要理解Spring Data MongoDB,它是Spring框架的一个扩展,提供了与MongoDB数据库交互的能力。要启用字段...
在本文中,我们将讨论如何基于`mongodb-driver`开发一个简单的ORM实现,以简化Java中的MongoDB操作。 首先,MongoDB官方驱动程序虽然功能强大,但对于业务开发来说,直接使用API可能会显得复杂。因此,为了提高开发...
`_id` 字段是 MongoDB 自动生成的唯一标识符,而其他字段是用户定义的数据。 此外,`find()` 方法可以接受查询条件,允许我们筛选特定的文档。例如,如果我们只想找到 "likes" 大于 50 的文档,可以这样做: ```...
在 Java 中使用 MongoDB 时,需要掌握各种操作查询的方法,本文档将详细介绍 Java 中 MongoDB 的各种操作查询的实例详解。 查询一条数据 在实际应用中,我们经常需要查询一条数据,例如根据 URL 查询对应的 ...
每个集合都有默认的_id字段作为唯一标识,如果没有指定,MongoDB会自动生成。 MongoDB 提供了一个交互式的shell,可用于管理数据库,包括用户认证、查看和操作数据库、创建和删除集合、监控复制状态、修复数据库、...
接下来,我们需要在Java项目中引入MongoDB的Java驱动。对于Maven项目,可以在`pom.xml`文件中添加以下依赖: ```xml <groupId>org.mongodb <artifactId>mongodb-driver-sync <version>4.2.3 ``` #### 三、获取...
在本文中,我们将深入探讨如何使用Java语言操作MongoDB数据库。MongoDB是一个流行的NoSQL数据库,以其灵活性、高性能和可扩展性而闻名。Java作为广泛使用的编程语言,提供了丰富的API来与MongoDB进行交互。以下是...
在这个Java测试类中,我们将深入探讨MongoDB与Java的集成以及常用的方法。 首先,为了在Java应用中使用MongoDB,我们需要引入MongoDB的Java驱动程序。这通常通过在`pom.xml`或`build.gradle`文件中添加依赖来完成。...
在MongoDB中,聚合框架是处理数据的一种强大工具,它允许开发者执行类似SQL的聚合操作,如GROUP BY、SUM、AVG等。本项目"spring_mongodb_aggregation_grouping"专注于利用Spring Data MongoDB库来实现这些功能。...
在这个特定的案例中,开发人员面临一个紧急需求,需要从名为 `mt_resources_access_log` 的集合中根据 `refererDomain` 字段进行分组,并从每个分组中选取最新插入的数据。这个任务在MongoDB中可以通过聚合框架(`...
这里,`User`是实体类,`String`代表主键类型(通常是MongoDB的_id字段),`findByUsername`是一个自定义查询方法。 为了实现业务逻辑,你可以创建一个Service类,注入`UserRepository`并调用其方法。例如: ```...
在Java中与MongoDB进行交互时,经常需要查询具有特定`ObjectId`的文档。`ObjectId`是MongoDB中用于唯一标识文档的一种数据类型,通常作为每个文档的默认 `_id` 字段。本示例将详细解释如何使用Java来查询具有指定`...
在本项目中,我们主要探讨的是如何利用MongoDB数据库与Java Spring框架来构建一个选课系统DEMO。MongoDB是一个流行的NoSQL数据库,它以JSON文档格式存储数据,适合处理大规模、非结构化的数据。而Java Spring框架是...