MongoDB 上手体验
一直都知道 mongoDB 是 NOSQL 中比较优秀的一款产品,采用直接保存JSON的方式给了开发者非常大的自由,身边也有不少优秀的开源项目使用mongoDB,今天让我们体验一起一下mongoDB吧。
准备
- 从官网下载对应版本的二进制包(本文以Windows平台为例。)
- 一路下一步>完成
- 在安装目录下
MongoDB\Server\4.4\bin
运行mongo.exe - 复制第二行的链接地址:
mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
连接
建立连接
基本数据库操作
新建数据库
use <DATEBASH_NAME>;
-
MongoDB 数据库使用
';'
来区分一段命令 -
执行完此命令数据库并不会真正被创建,直到插入文档(添加数据)后数据库才真正意义上被创建
-
此段代码通常在开发中不会被使用
查看所有数据库及大小
show dbs;
查看当前所在数据库名
db;

删除数据库
use <DATEBASH_NAME>;
db.dropDatabase();
基本集合操作
创建集合
db.createCollection(name, options);
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
实例:在 parksi 数据库中创建 test 集合
use parksi;
db.createCollection("test");

查询所有集合
show collections;

删除集合
use <DATEBASH_NAME>
db.<COLLECTIONS_NAME>.drop();
实例:删除 parksi 数据库 test 集合

基本文档操作
插入文档
db.<COLLECTION_NAME>.insert(document);
- 如果集合不存在将自动创建
- 插入的文档(document)为 JSON 格式
实例:向 parksi 数据库 students 集合插入一些文档
文档实例:
{
"name": "Liu Parksi",
"age": 15,
"sex": "男"
}
命令实例:
use parksi;
db.students.insert({
"name": "Liu Parksi",
"age": 15,
"sex": "男"
})

查询文档(基础)
db.<COLLECTIONS_NAME>.find(query, projection);
- query :可选,使用查询操作符指定查询条件(为空显示所有文档,格式为 JSON)
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
漂亮的显示
db.<COLLECTIONS_NAME>.find(query, projection).pretty();
实例: 查询 parksi 数据库 students 集合 名为 Liu Parksi学生的信息
db.students.find({"name": "Liu Parksi"}).pretty()

- MongoDB 数据库为我们自动分配了
_id
字段以供索引唯一文档
删除文档
db.<COLLECTIONS_NAME>.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
实例:删除 parksi 数据库 students 集合 _id 为5fa55402ebf11a19585c1561 学生的文档
use parksi;
db.students.remove({"_id" : ObjectId("5fa55402ebf11a19585c1561")})

更新文档
update()方法
用于更新已存在的文档,主要适用于文档结构变化不大或无变化的更新。
use <DATEBASH_NAME>;
db.<COLLECTIONS_NAME>.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
);
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
实例:将 parksi 数据库 students 集合 名为”Liu Parksi“的学生年龄改为14
use parksu;
db.students.update(
{"name" : "Liu Parksi"},
{ "age" : 14});

save() 方法
适用于文档结构有很大变化,直接用新文档覆盖旧文档。
_id 主键存在就更新,不存在就插入。
use <DATEBASH_NAME>;
db.<COLLECTIONS_NAME>.save(
<document>,
{
writeConcern: <document>
}
)
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
实例:将 parkis 数据库 students 集合 "_id" : ObjectId("5fa557d5ebf11a19585c1563" 的学生 文档作修改
{
"_id" : ObjectId("5fa557d5ebf11a19585c1563",
"naem": "Lparksi",
"age": 7,
"sex": "男"
}
use parksi;
db.students.save({
"_id" : ObjectId("5fa557d5ebf11a19585c1563",
"name": "Lparksi",
"age": 7,
"sex": "男"});