目录
1.MongoDB 的概念
在mongodb中基本的概念是文档、集合、数据库,以下是我整理的对应表格,可以帮助更容易理解Mongo中的概念:
SQL术语 | Mongo术语 | 对应关系 |
database | database | 数据库 |
table | collection | 数据库表/mongo集合 |
row | document | 数据库行/mongo文档 |
column | field | 数据库列/mongo域 |
index | index | 索引 |
primary key | primary key | 主键(mongo主键自动设为_id) |
以下我们最主要了解三个核心的基本概念;
1.数据库:
简介:
一个mongodb中可以建立多个数据库,MongoDB的默认数据库为"db",该数据库存储在data目录中。
常用指令:
在mongo中,使用show dbs可以查看所有数据库
运行use命令可以指定使用的数据库
mongo本身自带有三个库 admin local config,这些库分别是有特殊作用的,以下是说明:
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
2.集合:
介绍:
在 MongoDB 中,集合(Collection)是由一组文档(Document)组成的,类似于关系数据库中的表格。每个文档可以有不同的结构,但它们通常都有某些共同的字段。MongoDB 数据库中的每个文档都需要存储一个唯一键,这个键被称为 _id
,它可以用来保证每个文档的唯一性。
在 MongoDB 中,一个集合有一些基本的规则:
- 集合名必须以字母开头,长度不能超过 64 个字符,并且不能包含空格、句点、美元符号或 null 字符;
- 如果插入的文档中没有
_id
字段,MongoDB 会自动为其生成一个唯一的_id
; - 相同名称的集合中可能会包含不同结构的文档;
- 尝试向不存在的集合中插入文档时,MongoDB 会自动创建该集合;
- 删除集合时,其中的所有文档也会被删除。
创建集合的方式:
db.createCollection("conllectionName",{})
db.conllectionName.insert({}) 插入数据会自动创建集合
3.文档:
介绍:
在 MongoDB 中,文档(Document)是最基本的数据单元。它类似于关系型数据库中的一行记录,是 MongoDB 数据库中存储数据的基本单位。在 MongoDB 中,文档是由一组有序的键值对(key-value pairs)组成的,每个键值对被称为一个字段(Field),而整个文档则被存储在一个集合(Collection)中。MongoDB 中的文档可以包含不同类型的数据,例如字符串、整数、浮点数、布尔型、日期、数组、嵌套文档等。文档使用 BSON(Binary JSON)格式进行存储,这种格式具有高效率、易扩展等特点,也方便了数据传输和交换
创建规则:
在创建文档时需要注意以下几点:
- 文档中的键名不能重复;
- 键值对之间使用冒号(:)进行分隔,键值对与键值对之间使用逗号(,)进行分隔;
- 键名必须是字符串类型,但 MongoDB 会将双引号(")和单引号(')都作为字符串的标识符,因此可以使用任意一种符号;
- 键值可以是数组、对象等复杂类型。
简单使用:
在 MongoDB 中,要使用文档进行数据操作,通常需要完成以下几个步骤:
创建集合:如果集合不存在,需要先创建集合。可以通过 db.createCollection() 方法来创建集合,例如:
db.createCollection("users")
插入文档:使用 insertOne、insertMany 或 bulkWrite 方法向集合中插入文档,例如:
db.users.insertOne({
"name": "Alice",
"age": 18,
"hobbies": ["reading", "traveling"],
"address": {
"city": "Shanghai",
"street": "No.1234"
}
})
查询文档:使用 find 或 findOne 方法查询集合中的文档,例如:
db.users.find({"name": "Alice"})
更新文档:使用 updateOne、updateMany 或 bulkWrite 方法来更新集合中的文档,例如:
db.users.updateOne({"name": "Alice"}, {"$set": {"age": 20}})
删除文档:使用 deleteOne、deleteMany 或 bulkWrite 方法来删除集合中的文档,例如:
db.users.deleteOne({"name": "Alice"})
需要注意的是,如果要插入的文档中没有 _id 字段,MongoDB 会自动为其生成一个唯一的 _id。
2.常见数据类型
在 MongoDB 中,常用的数据类型包括:
- 字符串:即文本类型,使用引号(单引号或双引号)来表示,例如
"hello"
;- 整数:即整型,使用普通的数字来表示,例如
123
;- 浮点数:即浮点型,使用小数点表示,例如
3.14
;- 布尔型:即布尔值,只有两个取值
true
和false
;- 数组:即一组值的有序列表,使用中括号
[ ]
来表示,例如[1, 2, 3]
;- 对象:即键值对的集合,使用花括号
{ }
来表示,例如{ "name": "Alice", "age": 18 }
;- Null:即空值,表示这个字段没有值;
- 日期:即日期类型,可以使用 JavaScript 的 Date 对象进行表示;
- 正则表达式:即正则表达式类型,使用斜杠
/ /
表示,例如/^hello/
;- 二进制数据:即二进制类型,可以存储图片、音频、视频等数据。
需要注意的是,MongoDB 还支持嵌套文档,即在文档中再嵌套其他文档。此外,MongoDB 还支持 Geospatial 数据类型,用于存储地理位置信息。
3.如何链接mongo
要在 Java 中连接 MongoDB 数据库,需要使用 MongoDB 的 Java 驱动程序。目前,MongoDB 官方推荐使用的 Java 驱动程序是 MongoDB Java 驱动程序(MongoDB Java Driver)。
下面是使用 MongoDB Java 驱动程序连接 MongoDB 数据库的步骤:
引入 MongoDB Java 驱动程序的依赖:xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.11</version>
</dependency>
1.使用代码链接:
创建 MongoClient 对象并指定 MongoDB 服务器的地址和端口:
MongoClient mongoClient = new MongoClient("localhost", 27017);
获取到 MongoDB 数据库的实例:
MongoDatabase database = mongoClient.getDatabase("mydb");
获取到 MongoDB 集合的实例,可以对集合进行增删改查等操作:
MongoCollection<Document> collection = database.getCollection("mycollection");
对 MongoDB 数据库进行增删改查等操作:
// 插入文档
Document doc = new Document("name", "Alice").append("age", 18).append("address", new Document("city", "Shanghai").append("street", "No.1234"));
collection.insertOne(doc);
// 查询文档
FindIterable<Document> result = collection.find(new Document("name", "Alice"));
for (Document document : result) {System.out.println(document.toJson());}
// 更新文档
collection.updateOne(Filters.eq("name", "Alice"), new Document("$set", new Document("age", 20)));
// 删除文档
collection.deleteOne(new Document("name", "Alice"));
需要注意的是,MongoDB Java 驱动程序还支持通过连接字符串(Connection String)来进行 MongoDB 数据库的连接。此外,MongoDB Java 驱动程序还提供了更高级的 API,例如使用对象映射器(Object Mapper)进行操作等。
2.配置properties或yml链接:
mongodb://username:password@ip:port/dataSoruceName