MongoDB笔记

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/数据库

方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值