NoSQL - MongoDB 的基本使用

如果不是因为比赛,我可能会好久都不会知道它的存在

既然不会,就要在第一时间弄懂它

NoSQL基础概念

什么是NOSQL?

NoSQL最常见的解释是“non-relational”,即非关系型的,当然 “Not Only SQL”(不仅仅是SQL)也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。

NoSQL数据库类型

NOSQL主要有四种数据类型,分别是键值数据库列存储数据库文档数据库图形数据库

分类相关软件产品典型应用场景数据模型优点缺点
键值(key-value)Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。Key 指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CouchDB, MongoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

NoSQL优点

  • 大数据量,高性能

    ​ 大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

  • 灵活的可扩展性

    ​ NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。

  • 灵活的数据模型

    ​ NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。

  • 高可用

    NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

MongoDB环境安装

1.下载MongoDB数据库,地址:MongoDB Community Server

2.下载MongoDB Shell工具,地址:MongoDB Shell

3.安装MongoDB后,进入MongoDB根目录下的 bin 目录下,把MongoDB Shell工具中的bin目录下的所有文件放置MongoDB数据库bin目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8A5g2eV-1693294381868)(./assets/image-20230823232234932.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UFDcyRht-1693294381869)(./assets/image-20230823234254970.png)]

设置环境变量,点击path -> 编辑 -> 新建,将MongoDB bin目录路径写入之新建路径中,并依次点击确定即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PsBIb31-1693294381869)(./assets/image-20230823234501675.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfXIDNiv-1693294381870)(./assets/image-20230823234610681.png)]

打开cmd,输入mongosh localhost:27017,出现下图内容,即可代表Mongodb环境配置成功!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGxs6DAy-1693294381870)(./assets/image-20230823233805803.png)]

相关语法

以最常见的MongoDB为例,下面只显示一部分相关命令。如需了解具体命令,请自行查阅相关技术文档。

查看数据库命令

test> show dbs;
admin    40.00 KiB
config  108.00 KiB
local    72.00 KiB
nosql    72.00 KiB

使用数据库

test> use nosql;
switched to db nosql

当前数据库

test> db;
nosql

删除当前使用数据库

test> db.dropDatabase();
{ ok: 1, dropped: 'nosql' }

查看集合(相当于看表)

nosql> show collections;
user
或
nosql> show tables;
user

创建一个集合(相当于创建表)

nosql> db.createCollection("user");
{ "ok" : 1 }
nosql> show tables;
user

插入一个文档(相当于向表中插入数据)

nosql> db.user.insert({uid:1,name:'hjhk',age:23,mail:'hjhk@mail.com'});

条件查询

下面是MongoDB内置的操作符,通过以下操作符,即可实现特定查询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查询所有数据

nosql>  db.user.find();
[
  {
    _id: ObjectId("64e62cc5a0c2a1db4a832688"),
    uid: 1,
    name: 'hjhk',
    age: 23,
    mail: 'hjhk@mail.com'
  },
  {
    _id: ObjectId("64e62d36a0c2a1db4a832689"),
    uid: 2,
    name: 'rgrd',
    age: 17,
    mail: 'rgrd@mail.com'
  },
  {
    _id: ObjectId("64e62d55a0c2a1db4a83268a"),
    uid: 3,
    name: 'ttfg',
    age: 34,
    mail: 'ttfg@mail.com'
  }
]

查询uid为1的文档

nosql> db.user.find({"uid":1});
或 
nosql> db.user.find({"uid":{$eq:1}});
[
  {
    _id: ObjectId("64e62cc5a0c2a1db4a832688"),
    uid: 1,
    name: 'hjhk',
    age: 23,
    mail: 'hjhk@mail.com'
  }
]

查询字段uid的值大于2的文档

nosql> db.user.find({"uid":{$gt: 2}});
[
  {
    _id: ObjectId("64e62d55a0c2a1db4a83268a"),
    uid: 3,
    name: 'ttfg',
    age: 34,
    mail: 'ttfg@mail.com',
    password: 'rdgdw'
  }
]

查询uid字段值除以2等于0的文档

nosql> db.user.find({"uid":{$mod:[2,0]}});
[
  {
    _id: ObjectId("64e62d36a0c2a1db4a832689"),
    uid: 2,
    name: 'rgrd',
    age: 17,
    mail: 'rgrd@mail.com',
    password: 'efsgdww'
  }
]

查询name不等于1的数据

nosql> db.user.find({ "name": { $ne: 1 } });
[
  {
    _id: ObjectId("64e62cc5a0c2a1db4a832688"),
    uid: 1,
    name: 'hjhk',
    age: 23,
    mail: 'hjhk@mail.com',
    password: '213243434'
  },
  {
    _id: ObjectId("64e62d36a0c2a1db4a832689"),
    uid: 2,
    name: 'rgrd',
    age: 17,
    mail: 'rgrd@mail.com',
    password: 'efsgdww'
  },
  {
    _id: ObjectId("64e62d55a0c2a1db4a83268a"),
    uid: 3,
    name: 'ttfg',
    age: 34,
    mail: 'ttfg@mail.com',
    password: 'rdgdw'
  }
]

查询name和password都不为1的数据

nosql> db.user.find({$and:[{"name":{$ne:1}},{"password":{$ne:1}}]});
[
  {
    _id: ObjectId("64e62cc5a0c2a1db4a832688"),
    uid: 1,
    name: 'hjhk',
    age: 23,
    mail: 'hjhk@mail.com',
    password: '213243434'
  },
  {
    _id: ObjectId("64e62d36a0c2a1db4a832689"),
    uid: 2,
    name: 'rgrd',
    age: 17,
    mail: 'rgrd@mail.com',
    password: 'efsgdww'
  },
  {
    _id: ObjectId("64e62d55a0c2a1db4a83268a"),
    uid: 3,
    name: 'ttfg',
    age: 34,
    mail: 'ttfg@mail.com',
    password: 'rdgdw'
  }
]

更新/修改数据

#把字段age为25时的数据中的name更改为xiaoli
db.user.update({age: 23}, {$set: {name:'xiaoli'}}, false, true);
相当于:update users set name = 'changeName' where age = 25;
#把字段name为rgrd时的数据中的age数值增加20
db.user.update({name: 'rgrd'}, {$inc: {age: 20}}, false, true);
相当于:update users set age = age + 20 where name = 'rgrd';
#把字段name为ttfg时的数据中的age数值增加10并把name更改为xiaogang
db.user.update({name: 'ttfg'}, {$inc: {age: 10}, $set: {name: 'xiaogang'}}, false, true);
相当于:update users set age = age + 10, name = 'xiaogang' where name = ‘ttfg';

条件删除

db.users.remove({age: 23});

删除当前聚集集合(即删除当前表)

db.nosql.drop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条小龍龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值