本系列基于对的学习笔记
第一章:数据库和集合基本操作
简介
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 |
注意事项
数据库名可以是任何字符,但是不能有空格、点号和 $ 字符。