MongoDB基础

MongoDB 是一个基于分布式文件存储的数据库,旨在为 WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 主要特点:

  • MongoDB 文档数据库,存储的是文档。
  • MongoDB 的内部执行引擎是 JS 解释器。当我们存储一个文档时,会将这个文档保存成 Bson 格式存储。查询时将其转换为 JS 对象,并可以通过熟悉的 JS 语法来操作。
  • MongoDB 的数据库和集合都可以隐式创建。

启动
sudo systemctl start mongod

查看是否启动
sudo systemctl status mongod


sudo ps -ef | grep mongo

擦看进程
sudo netstat -nalp | grep mongod

看端口号


报错试试权限问题:

经过多次的查找后,发现是dbpath目录(默认:/var/lib/mongodb),日志目录(默认:/var/lib/mongo)权限的问题权限不足,所以导致命令启动失败,所以需要对次赋予权限才能够正常启动,

在终端中执行以下命令:

sudo chown -R mongodb:mongodb /var/lib/mongodb

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock


三、MongoDB基础操作

mongosh

#进入其交互界面

  1. 常用操作命令
    常用的操作MongoDB数据库的相关命令包括:
    (1)show dbs:显示数据库列表;
    (2)show collections:显示当前数据库中的集合(类似关系数据库中的表table);
    (3)show users:显示所有用户;
    (4)use yourDB:切换当前数据库至yourDB;
    (5)db.help() :显示数据库操作命令;
    (6)db.yourCollection.help() :显示集合操作命令,yourCollection是集合名;
    MongoDB没有创建数据库的命令,如果要创建一个名称为"School"的数据库,需要先运行"use School"命令,之后做一些操作,比如,使用命令"db.createCollection('teacher')"创建集合,这样就可以创建一个名称为"School"的数据库。#新建

2.简单操作演示

下面以一个School数据库为例进行操作演示,将在School数据库中创建两个集合teacher和student,并对student集合中的数据进行增、删、改、查等基本操作。需要说明的是,文档数据库中的集合(Collection),相当于关系型数据库中的表(table)。

(1)切换到School数据库

命令如下:

use School

language-shell

注意,MongoDB无需预创建School数据库,在使用时会自动创建。

(2)创建集合

创建集合(Collection)的命令如下:

db.createCollection('teacher')

图9 创建集合

实际上,MongoDB在插入数据的时候,也会自动创建对应的集合,无需预定义集合。

(3)插入数据

插入数据的具体命令如下:

db.student.insertOne({_id:1, sname: 'zhangsan', sage: 20})

#_id可选

language-shell

运行完以上命令,student已自动创建,这也说明MongoDB不需要预先定义集合(collection),在第一次插入数据后,集合会被自动创建。此时,可以使用"show collections"命令查询数据中当前已经存在的集合,如图10所示。

图10 show collections命令执行结果

(4)查找数据

查找数据所使用的基本命令格式如下:

db.youCollection.find(criteria, filterDisplay)

language-shell

其中,criteria表示查询条件,是一个可选的参数;filterDisplay表示筛选显示部分数据,如显示指定某些列的数据,这也是一个可选的参数,但是,需要注意的是,当存在该参数时,第一个参数不可省略,若查询条件为空,可用{}做占位符。

(a)查询所有记录

db.student.find()

language-shell

该命令相当于关系数据库的SQL 语句"select * from student"。

(b)查询sname='zhangsan'的记录

db.student.find({sname: 'zhangsan'})

language-shell

该命令相当于关系数据库的SQL 语句"select * from student where sname='zhangsan'"。

©查询指定列sname、sage数据

db.student.find({},{sname:1, sage:1})

language-shell

该命令相当于关系数据库的SQL 语句"select sname,sage from student"。其中,sname:1 表示返回sname列,默认_id字段也是返回的,可以添加_id:0 (意为不返回_id),写成{sname: 1, sage: 1,_id:0 },就不会返回默认的_id字段了。

(d)AND条件查询

db.student.find({sname: 'zhangsan', sage: 20})

language-shell

该命令相当于关系数据库的SQL 语句"select * from student where sname = 'zhangsan' and sage = 20"。

(e)OR条件查询

db.student.find({$or: [{sage: 20}, {sage: 25}]})

language-shell

该命令相当于关系数据库的SQL 语句"select * from student where sage = 22 or sage = 25"。

(5)修改数据

修改数据的基本命令格式如下:

db.youCollection.updateOne(criteria, objNew, upsert, multi )

language-shell

对于该命令做如下说明:

(1)criteria:表示update的查询条件,类似sql update查询内where后面的条件;

(2)objNew : update的对象和一些更新的操作符(如$set)等,也可以理解为SQL语句中的update语句中的set后面的内容。

(3)upsert : 如果不存在update的记录,是否插入objNew,true表示插入,默认是false,表示不插入。

(4)multi: MongoDB默认是false,只更新找到的第一条记录,如果这个参数为true,就会把按条件查出来的多条记录全部更新。默认是false,只修改匹配到的第一条数据。

上面各个参数中,其中criteria和objNew是必选参数,upsert和multi可选参数。

这里给出一个实例,语句如下:

db.student.updateOne({sname: 'zhangsan'}, {$set: {sage: 22}}, false, true)

language-shell

该命令相当于关系数据库的SQL 语句"update student set sage =22 where sname = 'zhangsan';"。执行该命令的屏幕截图如图11所示。

图11 修改数据

(6)删除数据

db.student.deleteOne({sname: 'zhangsan'})

language-shell

该命令相当于关系数据库的SQL 语句"delete from student where sname='chenliu'"。

执行该命令过程的屏幕截图如图12所示。

图12 删除数据

(7)删除集合

db.student.drop()


python

MongoDB命令 PyMongo方法

insertOne insert_one

insertMany insert_many

find find

updateone update_one

updateMany update_many

deleteOne delete_one

deleteMany delete_many

相关推荐
Rookie也要加油33 分钟前
01_SQLite
数据库·sqlite
liuxin3344556637 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。1 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec1 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke2 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录2 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.3 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
程序猿小D3 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa