虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的。MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分形成了这篇入门教程,希望对大家有所帮助。
简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。
安装
以前写的MongoDB安装教程是基于3.2版本的,发现有的朋友使用新版本安装有问题,这次我们使用最新版本再来安装一次,本文所使用的MongoDB版本为4.2.5,总的来说,新版本的安装更简单了。
Windows下的安装
- 下载MongoDB安装包,选择
Windows x64
版本安装,下载地址:www.mongodb.com/download-ce…
相关概念
MongoDB是非关系型数据库当中最像关系型数据库的,所以我们通过它与关系型数据库的对比,来了解下它的概念。
SQL概念 | MongoDB概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据库操作
- 创建数据库,使用
use
命令去创建数据库,当插入第一条数据时会创建数据库,例如创建一个test
数据库;
> use test switched to db test > db.article.insert({name:"MongoDB 教程"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB config 0.000GB local 0.000GB test 0.000GB
- 删除数据库,使用db对象中的
dropDatabase()
方法来删除;
> db.dropDatabase() { "dropped" : "test", "ok" : 1 } > show dbs admin 0.000GB config 0.000GB local 0.000GB
集合操作
- 创建集合,使用db对象中的
createCollection()
方法来创建集合,例如创建一个article
集合;
> use test switched to db test > db.createCollection("article") { "ok" : 1 } > show collections article
- 删除集合,使用collection对象的
drop()
方法来删除集合,例如删除一个article
集合;
> db.article.drop() true > show collections
文档操作
上面的数据库和集合操作是在MongoDB的客户端中进行的,下面的文档操作都是在Robomongo中进行的。
插入文档
- MongoDB通过collection对象的
insert()
方法向集合中插入文档,语法如下;
db.collection.insert(document)
- 使用collection对象的
insert()
方法来插入文档,例如插入一个article
文档;
db.article.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'Andy', url: 'https://www.mongodb.com/', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
- 使用collection对象的
find()
方法可以获取文档,例如获取所有的article
文档;
db.article.find({})
{ "_id" : ObjectId("5e9943661379a112845e4056"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Andy", "url" : "https://www.mongodb.com/", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100.0 }
更新文档
- MongoDB通过collection对象的
update()
来更新集合中的文档,语法如下;
db.collection.update( <query>, <update>, { multi: <boolean> } ) # query:修改的查询条件,类似于SQL中的WHERE部分 # update:更新属性的操作符,类似与SQL中的SET部分 # multi:设置为true时会更新所有符合条件的文档,默认为false只更新找到的第一条
- 将title为
MongoDB 教程
的所有文档的title修改为MongoDB
;
db.article.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
- 除了
update()
方法以外,save()
方法可以用来替换已有文档,语法如下;
db.collection.save(document)
- 这次我们将ObjectId为
5e9943661379a112845e4056
的文档的title改为MongoDB 教程
;
db.article.save({ "_id" : ObjectId("5e9943661379a112845e4056"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Andy", "url" : "https://www.mongodb.com/", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100.0 })
删除文档
- MongoDB通过collection对象的
remove()
方法来删除集合中的文档,语法如下;
db.collection.remove( <query>, { justOne: <boolean> } ) # query:删除的查询条件,类似于SQL中的WHERE部分 # justOne:设置为true只删除一条记录,默认为false删除所有记录
- 删除title为
MongoDB 教程
的所有文档;
db.article.remove({'title':'MongoDB 教程'})
查询文档
- MongoDB通过collection对象的
find()
方法来查询文档,语法如下;
db.collection.find(query, projection) # query:查询条件,类似于SQL中的WHERE部分 # projection:可选,使用投影操作符指定返回的键
- 查询
article
集合中的所有文档;
- MongoDB中的条件操作符,通过与SQL语句的对比来了解下;
操作 | 格式 | SQL中的类似语句 |
---|---|---|
等于 | {<key>:<value>} | where title = 'MongoDB 教程' |
小于 | {<key>:{$lt:<value>}} | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | where likes != 50 |
- 条件查询,查询title为
MongoDB 教程
的所有文档;