贺胖娇的编程之旅......

蓝桥教程-MongoDB基础教程

2022.05.05

本系列基于对MongoDB基础教程的学习笔记

第一章:数据库和集合基本操作

简介

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的。

在 MongoDB 中,一个数据库包含多个集合,类似于 MySQL 中一个数据库包含多个表;一个集合包含多个文档,类似于 MySQL 中一个表包含多条数据。

可以把集合记为表,文档记为一条记录

使用

启动mongodb服务

sudo service mongodb start

命令行进入mongodb

mongo

查看数据库列表

show dbs

查看当前数据库对象或集合

db

连接到指定数据库

use test # 连接到test数据库,如果没有,新建

销毁数据库

db.dropDatabase()

集合操作

创建集合

use test
db.createCollection("users")

查看创建的集合

show collections

删除集合

show collections
db.users.drop()

集合CRUD操作

插入操作

在插入数据的时候可能需要多行输入, 注意括号不要直接输入完整的一对,可以先敲出左边括号,然后回车写数据, 等数据全部写完后再补充右括号,因为 mongodb shell 会把右括号判断为指令结束, 不等输入数据就执行语句。

insert插入操作

插入数据时,如果 users 集合没有创建会自动创建。

> use mydb
switched to db mydb
> db.users.insert([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])
save操作

插入数据时,如果 users 集合没有创建会自动创建

> use mydb2
switched to db mydb2
> db.users.save([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])

insert 和 save 的区别:为了方便记忆,可以先从字面上进行理解,insert 是插入,侧重于新增一个记录的含义;save 是保存,可以保存一个新的记录,也可以保存对一个记录的修改。因此,insert 不能插入一条已经存在的记录,如果已经有了一条记录(以主键为准),insert 操作会报错,而使用 save 指令则会更新原记录。

查询

全量查询

查询操作使用命令:

db.COLLECTION_NAME.find() # 会返回集合中所有文档,实际应用中很少见

美观返回

pretty()语句使返回值更美观

db.COLLECTION_NAME.find().pretty()

可以通过设置,始终以pretty方式返回:

echo "DBQuery.prototype._prettyShell = true" >> ~/.mongorc.js

mongoDb中的AND

MongoDB 不需要类似于其他数据库的 AND 运算符, 当 find() 中传入多个键值对时,MongoDB 就会将其作为 AND 查询处理。

> db.post.find({"by":"shiyanlou","to": "chenshi"}).pretty()

这条语句对应的关系型数据库语句是:

SELECT * FROM `post_db` WHERE `by` = 'shiyanlou' AND `to` = 'chenshi'

mongoDb中的OR

MongoDB 中,OR 查询语句以 $or 作为关键词,用法如下:

> db.post.find(
  {
    $or: [
      {key1: value1}, {key2:value2}
    ]
  }
).pretty()

同时使用AND和OR

> db.post.find({
    "likes": {$gt:10},
    $or: [
        {"by": "shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
}).pretty()

模糊查询

MongoDB 的模糊查询可以用正则匹配的方式实现

# 以 'start' 开头的匹配式:
{"name":/^start/}

# 以 'tail' 结尾的匹配式:
{"name":/tail$/}

大于小于符号

符号 含义 记忆原词
gt 大于 greater than
lt 小于 less than
gte 大于等于 greater than equal
lte 小于等于 less than equal

注意事项

数据库名可以是任何字符,但是不能有空格、点号和 $ 字符。

发表评论