文章目录
前言
因为之前只接触过mysql,对于其他的数据库语言并没有过多的了解,因为新的这家公司用mongo和pg比较多,pg感觉和mysql的语法很类似,决定花点点时间mongo入门,后边开发肯定也得用上,既然今年决定好好写博客,那就都记录一下。
一、数据库概念对比
在菜鸟教程那边截得一张图,记录一下
二、Mac本地安装mongo环境
因为我是Mac,只记录我mac环境的下载安装的过程,跟着官网用brew下载安装的
官方文档
brew安装命令
brew tap mongodb/brew
brew update
brew install mongodb-community@7.0
如果你没用安装brew,我之前找到别人的教程: mac安装brew小白指引
贴一下我跑完命令的界面截图
启动命令安装完也贴给你了,可以直接复制执行,我这里也贴一下
brew services start mongodb/brew/mongodb-community
或者 你也可以选择版本号
brew services start mongodb-community@7.0
出现报错了
去出现报错的这个文件打开看看
手动双击运行一下
再次执行start命令,发现能正常使用了
brew services start mongodb/brew/mongodb-community
这里也有可能我之前已经启动了,然后在启动也会报错,可以尝试用restart命令再试试
如果你想要关闭的话
brew services stop mongodb/brew/mongodb-community
或者 你也可以选择版本号
brew services stop mongodb-community@7.0
引用官网的原文 运行后执行以下命令
To begin using MongoDB, connect to the running instance. From a new terminal, issue the following:
mongosh
但是到了这一步又报错了,真是一波三折啊
mongod 查看报错信息
{“t”:{“$date”:“2024-02-26T15:47:03.630+08:00”},“s”:“E”, “c”:“CONTROL”, “id”:20557, “ctx”:“initandlisten”,“msg”:“DBException in initAndListen, terminating”,“attr”:{“error”:“NonExistentPath: Data directory /data/db not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the ‘storage.dbPath’ option in the configuration file.”}}
看着是没有对应的文件目录,于是我们来看看原来的data diretory里有什么东西
如果你想要看相关数据、配置或日志信息,看你的电脑是intel还是m1,m2芯片
发现确实没有东西,那没办法了 自己建一个
sudo mkdir -p mongoDB/data/db
自行设置数据存放的地方,我刚刚创建的是mongoDB/data/db 这里验证一下
mongod --dbpath mongoDB/data/db
还是报错了,但是报错信息变了,说明确实是这个问题,这次又是权限问题了
执行以下命令后再执行
sudo chown -R `id -un` mongoDB/data/db
参考blog: link
这下真是完工了,真是一场酣畅淋漓的下载安装经历,问题接踵而至,官网往往都是些正常情况,现实中总是有很多奇怪的问题,但当你把问题解决掉真的能有很强的正反馈,慢慢来比较快!
初始没有账号密码,刚刚跑mongod的时候也会有提醒,但是不影响使用,要创建账号密码的自行处理
接下来开始学习简单的语法来面对以后的日常工作吧
三、常见语法
接下来就是经典的菜鸟教程环节,这里做一下整合记录,自己记录一下加深印象
1.创建/删除数据库
1.1创建数据库与集合
use DATABASE_NAME
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库
这里我就用默认的数据库
use test;
show dbs; //查看当前所有的数据库 刚开始数据库没数据时不展示
db.test.insertOne({"user_name":"zx"}); //插入数据 此时没有创建collections也没法展示
db.createCollection("user") //创建一个名为user的collection 刷新后出现数据
1.2删除数据库与集合
删除数据库
use test; //切换到要删除的数据库
db.dropDatabase();
删除集合
db.collection.drop()
2.文档的增删改查
再贴一个官网的教程: https://www.mongodb.com/docs/mongodb-shell/crud/
英文好的小伙伴可以自行观看,其中一些方法的参数设置都有精确讲解,这里只记录最简单的用法,由浅入深
我发现菜鸟教程的有些语法已经被环境所淘汰,所以那种被淘汰的方法不记录,仅记录最新版方法
2.1插入
db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数说明:
document:要写入的文档。
writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。
我们也可以将数据定义为一个变量,如下所示:
document=({
user_name: "zx",
age: 25,
language: "golang"
});
执行插入操作:
db.user.insertOne(document)
2.2查找文档
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。 如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
筛选条件
一张好图,使我的mysql与mongo旋转
为什么不能统一这个比较查询的条件语法呢,去官方文档看了一圈
只能说还是英语得学好,一下能理解mongo是用英文首字母来确认功能了
AND和OR的使用
MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
AND 和 OR 联合使用
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where likes>50 AND (by = ‘菜鸟教程’ OR title = ‘MongoDB 教程’)’
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
2.3更新文档
类似于增加的方法
db.collection.updateOne() 向指定集合更新单个文档
db.collection.updateMany() 向指定集合更新多个文档
2.4删除文档
MongoDB 数据更新可以使用 update() 函数。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。
数据提前准备了两条用户名一样的数据
批量删除不解释,所有用户名为zx的都删除掉了
deleteOne是什么样的规则呢?
可以看到把第一条记录删除掉了
查看官网文档也可以找到对应的删除顺序描述,与我们判断一致
四、总结
原以为是个很简单的东西,其实一整套下来也看了挺久,中间会有各种各样奇怪的问题烦你,这篇文章也断断续续花了两天闲暇时间才大致写完,一点点跟着官方文档和菜鸟教程学过来,保持这种求知的欲望,以后还要继续加油,其中写博客记录,也是一次巩固和提升,要继续坚持写下去呀!!!