mongo学习记录


前言

因为之前只接触过mysql,对于其他的数据库语言并没有过多的了解,因为新的这家公司用mongo和pg比较多,pg感觉和mysql的语法很类似,决定花点点时间mongo入门,后边开发肯定也得用上,既然今年决定好好写博客,那就都记录一下。


一、数据库概念对比

在菜鸟教程那边截得一张图,记录一下
图片来源于菜鸟教程

二、Mac本地安装mongo环境

因为我是Mac,只记录我mac环境的下载安装的过程,跟着官网用brew下载安装的

官方文档

mongoDB官方文档

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是什么样的规则呢?
在这里插入图片描述
可以看到把第一条记录删除掉了
查看官网文档也可以找到对应的删除顺序描述,与我们判断一致
在这里插入图片描述

四、总结

原以为是个很简单的东西,其实一整套下来也看了挺久,中间会有各种各样奇怪的问题烦你,这篇文章也断断续续花了两天闲暇时间才大致写完,一点点跟着官方文档和菜鸟教程学过来,保持这种求知的欲望,以后还要继续加油,其中写博客记录,也是一次巩固和提升,要继续坚持写下去呀!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值