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

相关推荐
PGCCC12 分钟前
【PGCCC】Postgresql 存储设计
数据库·postgresql
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
远歌已逝5 小时前
管理Oracle实例(二)
数据库·oracle
日月星宿~5 小时前
【MySQL】summary
数据库·mysql
爱吃土豆的程序员5 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
睿思达DBA_WGX6 小时前
Oracle 11g rac 集群节点的修复过程
数据库·oracle
尘浮生6 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
Leo.yuan7 小时前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi