MongoDB
MongoDB是跨平台的、一个基于分布式文件存储的数据库。由C++语言编写。用它创建的数据库具备性能高、可用性强、易于扩展等特点。MongoDB将数据存储为一个文档,数据结构由键值(key:value)对组成。MongoDB文档类似于 JSON 对象。字段值可以包含字符串、数字、数组、当然也可以是另一个文档。文档是可以嵌套的。
概述
MongoDB与一般关系型数据库不同的地方在于存储概念的不同,在关系型数据库中的一张表的概念对于mongo来说则是一个集合,一条记录对应的是集合中的一个文档,而表与表之间的join关系也变为了嵌套文档的方式。
集合
与关系型数据库不同的是,关系型数据库中的表可存储的类型是固定的,而在mongo中的集合,则是可以插入不同格式和类型的数据,但一般情况下,一个集合中的数据文档都会有一定的共同点。
在mongo中,每个集合中的文档的主键都为_id字段(这是预设的)
集合的命名要求
不能是空字符串、不能含有\0字符(空字符),这个字符表示集合名的结尾,不能以"system."开头,这是为系统集合保留的前缀。
集合名用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
文档
文档相当于关系型数据库中的一条记录。它数据是由一组一组键值对组成的,具有动态的模式,所以文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这一点,跟关系型数据库有很大的不同。
在文档中,每一个字段的键/值对是有序的。同时一个文档内的每个字段的键之间不可以重复,键同样不能包含/0,且对大小写敏感。
文档的主键生成规律
_id 是一个 12 字节长的十六进制数,它保证了每一个文档的唯一性。在插入文档时,需要提供 _id。如果你不提供,那么 MongoDB 就会为每一文档提供一个唯一的 id。_id 的头 4 个字节代表的是当前的时间戳,接着的后 3 个字节表示的是机器 id 号,接着的 2 个字节表示 MongoDB 服务器进程 id,最后的 3 个字节代表递增值。
Mongo操作指令
创建|使用数据库
Use xxx 会创建一个新的数据库,如果该数据库存在,则返回这个数据库。
查看当前数据库
db
显示数据库列表
show dbs
显示当前数据库所有集合
show collections
创建集合
db.createCollection(name, options),name 是集合名称,字符串类型;options 是可选项,是一个文档类型,指定内存大小和索引等选项,options参数如下:
当集合大小达到max设置的值时,就会从逐渐删除旧文档
查询集合中的所有文档
db.集合名.find(查询条件)
格式化查询结果
.pretty()
查询文档
db.集合名.findOne(查询条件)
findOne只会返回一个文档
删除集合
db.集合名.drop(),删除集合会返回布尔值表示是否删除成功
插入文档
db.集合名.insert({key : value"})
更新文档
db. 集合名_Name.save({_id:id,key:value})如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
db.collection_name.update(查询条件,对象及操作符,查询不到是否新增{upsert:布尔},仅更新查询到的第一条{multi:布尔})
删除文档
db.集合名.remove(查询条件,只删除匹配的第一个文档{justOne:})
$type 操作符(匹配类型符)
匹配类型符用于作为条件匹配文档的某个键值对的值的类型,通过{$type:代表数字}来进行使用,数字与类型之间的关系如下
例如:db.xxx.find({"name":{$type:2}}).pretty(),就会查询这个集合中所有name值为String类型的文档
条件操作符
Java操作MongoDB
pom文件引入:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>xxxx</version> </dependency> |
链接mongoDB
在java程序中链接mongoDB
//连接到 mongodb 服务 MongoClient mongoClient = new MongoClient("IP地址", 端口);//默认端口为27017 |
MongoDB若是设置了密码认证
List<ServerAddress> adds = new ArrayList<>(); //ServerAddress()两个参数分别为 服务器地址 和 端口 ServerAddress serverAddress = new ServerAddress("localhost", 27017); adds.add(serverAddress); List<MongoCredential> credentials = new ArrayList<>(); //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码 MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray()); credentials.add(mongoCredential); //通过连接认证获取MongoDB连接 MongoClient mongoClient = new MongoClient(adds, credentials); //连接到数据库 MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); //这里的 "test" 表示数据库名,若指定的数据库不存在,mongoDB将会在你第一次插入文档时创建数据库。 |
MongoClient相关指令
获取集合
MongoCollection<Document> collection = mongoDatabase.getCollection("集合名");
如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
创建文档并插入
Document document = new Document("key","value");
新增文档内容
document.append(“key”:”value”);
插入文档
collection.insertOne(document);
插入多个文档
collection.insertMany(List<Document>);
删除符合条件的文档
Bson filter = Filters.eq("key", "value");
collection.deleteOne(filter);
deleteOne用于删除符合条件的第一个文档,若要删除全部符合条件的,则使用deleteMany即可
修改文档
collection.updateOne(filter,document);
修改多个文档则使用
collection.updateMany(filter,document);
查询文档
//查询所有
FindIterable<Document> documents = collection.find();
//获取迭代器
MongoCursor<Document> iterator = documents.iterator();
//遍历
while (iterator.hasNext()){
System.out.println(iterator.next());
}
若要进行条件查询,则在collection.find()中添加BSON查询对象
//Bson查询条件
Bson filter = Filters.eq("key", "value");
//根据Bson条件查询
FindIterable<Document> documents = collection.find(filter);
SpringBoot链接MongoDB
Pom依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置文件的链接配置
spring.data.mongodb.uri=mongodb://用户名:密码@localhost:27017/数据库
没有认证则是
spring.data.mongodb.uri=mongodb://localhost:27017/数据库
方法: