一直都知道 mongoDB 是 NOSQL 中比较优秀的一款产品,采用直接保存JSON的方式给了开发者非常大的自由,身边也有不少优秀的开源项目使用mongoDB,今天让我们体验一起一下mongoDB吧。

准备

  1. 官网下载对应版本的二进制包(本文以Windows平台为例。)
  2. 一路下一步>完成
  3. 在安装目录下MongoDB\Server\4.4\bin运行mongo.exe
  4. BhrUyQ.md.png
  5. 复制第二行的链接地址:mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

连接

建立连接

  1. 打开Navicat Premium 15刚刚打开的命令行窗口

  2. 新建 MongDB数据库连接BhsP1S.png

  3. 使用URL添加连接(URL为刚才复制的链接)BhsnhV.png

基本数据库操作

新建数据库

use <DATEBASH_NAME>;
  • MongoDB 数据库使用';'来区分一段命令

  • 执行完此命令数据库并不会真正被创建,直到插入文档(添加数据)后数据库才真正意义上被创建

  • 此段代码通常在开发中不会被使用

    image-20201106212721397

查看所有数据库及大小

show dbs;
  • 默认有几个用于MongoDB自身的数据库

    Bhy4G6.png

查看当前所在数据库名

db;
BhyvJP.png

删除数据库

use <DATEBASH_NAME>;
db.dropDatabase();
  1. 切换到对应数据库

  2. 执行删除操作

    Bh6uyF.png

基本集合操作

创建集合

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");
Bh6HpV.png

查询所有集合

show collections;
Bhci6O.png

删除集合

use <DATEBASH_NAME>
db.<COLLECTIONS_NAME>.drop();

实例:删除 parksi 数据库 test 集合

BhccNR.png

基本文档操作

插入文档

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": "男"
})
Bhgcqg.png

查询文档(基础)

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()
BhRljK.png
  • 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")})
BhWmqS.png

更新文档

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});
BhfFwF.png

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": "男"});