mongodb安装和基本操作
七八个月前学的mongodb,最近用着发现自己又有点遗忘了,特意去翻了翻以前的笔记,写在一个小本本上
这翻着翻着就不得劲儿了,本子太小了,字儿也让我自己一阵感动😹,还是在园子里重新小结复习一下。
所用操作都是基于Mac下的
一.下载安装
1.安装包安装
官网:下载地址:https://www.mongodb.com/download-center#community
自行选择版本
(我是通过下面的方式,所以就主要讲后者)
2.homebrew安装
先可以查找有哪些版本
brew search mongodb-community
选择一个稳定版,不要下最新的
brew install mongodb-community@4.4 #我这里随便选了个版本,@ 符号后面的 4.2是版本号
3.添加环境变量
待到安装完毕查看 bash_profile 文件,同时找到你的mongo执行的bin路径
export PATH=${PATH}:/usr/local/opt/mongodb-community@4.2/bin
这样一来,进入mongo的shell或者查看信息就不用输入一大段命令了
二.运行MongoDB
我们可以使用 brew 命令或 mongod 命令来启动服务。
1.brew 启动:
brew services start mongodb-community@4.2
2.brew 停止:
brew services stop mongodb-community@4.2
3.mongod 命令后台进程方式:
mongod --config /usr/local/etc/mongod.conf --fork
mongod方式启动要关闭可以进入 mongo shell 控制台来实现:
>use admin; > db.adminCommand({ "shutdown" : 1 });
如果你的关闭实在出了问题,情急之下可以在terminal直接杀死进程关闭:
killall mongod
注意;一定要规范关闭服务,不然下次很容易出错
三.基本概念
讲的很齐全
详细介绍:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
四.基本操作
1.切换(创建)数据库
> use mydb
查看当前连接的数据库:
> db
查看所有的数据库:
> show dbs
列出的所有数据库中看不到 mydb 或者显示 mydb(empty) ,因为 mydb 为空,里面没有任何东西,MongoDB 不显示或显示 mydb(empty)。
2.销毁数据库
使用 db.dropDatabase() 销毁数据库:
> use local
switched to db local
> db.dropDatabase()
再查看所有的数据库:
> show dbs
3.集合(collection)的创建和删除|创建集合
在数据库 mydb 中创建一个集合
> use mydb switched to db mydb > db.createCollection("users")
查看创建的集合:
> show collections
删除集合的方法如下:(删除 users 集合)
> show collections
> db.users.drop()
查看是否删除成功:
> show collections
4.向集合中插入数据
1 使用 insert()
插入数据时,如果 users 集合没有创建会自动创建。
> use mydb switched to db mydb > db.users.insert([ ... { name : "jam", ... email : "jam@qq.com" ... }, ... { name : "tom", ... email : "tom@qq.com" ... } ... ])
2 使用 save()
插入数据时,如果 users 集合没有创建会自动创建。
> use mydb2 switched to db mydb2 > db.users.save([ ... { name : "jam", ... email : "jam@qq.com" ... }, ... { name : "tom", ... email : "tom@qq.com" ... } ... ])
创建对象a,b,并分别保存
// 创建对象a,b a = {name : "user1"}; b = {name : "user2"}; // 保存对象a,b db.user.save(a); db.user.save(b);
注意到,我们在这之前根本没有创建过名叫myfirstdb的数据库,也没有创建过名叫user的集合,但为什么命令依然能够执行、并且得到我们预期的结果?这是因为MongoDB作为文档型数据库,它是无表结构的数据库,它不需要预先定义表结构。
正是这个特性,MongoDB拥有比关系型数据库更快的处理速度;另外,它还减少了添加字段等表结构变更所需要的开销。这样,我们就不必再去关心表结构和程序之间的一致性问题;简单来说,就是你在程序中添加一个字段时,不必考虑数据库是否有这个字段,因为MongoDB会自动为你创建。
5.插入一条复杂一点的记录
c = {name : "user2", card:"KK8566"}; db.user.save(c);
在这里,我们增加了一个字段”card”,这在之前是不存在的,
会自动为所有文档生成了一个card字段。
6.修改记录
上一个例子中,我们看到有两个”user2”,我们现在要把最后一个改为”user3”
db.user.update( {name:"user2", card:"KK8566"}, {$set:{name:"user3", card:"KK8566"} } );
7.删除记录
我们删除第一个文档
db.user.remove( {name : "user1" } )
8. 查询记录
列出所有记录
db.user.find();
可以看到,在上一小节我们执行的删除命令,数据库里仅剩两个文档。
使用while来批量输出
var cursor = db.user.find(); while(cursor.hasNext()) printjson( cursor.next());
转为数组
var arr = db.user.find().toArray();
arr[1]; // 显示第1个
事实上,我们在Node.js的服务器端操作MongoDB时,也是使用类似的方式。
9.条件查询
用MongoDB查询语句来实现MySQL的条件查询语句:SELECT * FROM user WHERE NAME=”user3”
db.user.find( { name : "user3" } ).forEach( printjson);
上面的命令将会返回所有满足条件的文档,为了节省开销,还可以使用findOne()来得到满足条件的第一个文档:
db.user.findOne( { name : "user3" } );
限制查询结果集
在查询语句后面加上limit(num)即可
注意,这里仅仅是一个简单的条件限制。我们在实际应用中,会有很多很复杂的需求;在MySQL中,我们会使用多个AND或OR来表示与和或的关系。在MongoDB中,也有类似AND或OR的关键字,但MongoDB中,一切都是用类似Json的格式来表达的。
可视化工具推荐:NoSQLBooster for MongoDB
参考:https://zhuanlan.zhihu.com/p/30160849
https://www.jianshu.com/p/8bf26effa737
db.user.update( {name:"user2", card:"KK8566"}, {$set:{name:"user3", card:"KK8566"} } );