Fork me on GitHub

mongoDB学习指南

Mongodb是分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,接下来就让我们学习一下它吧!

安装和配置

mongoDB安装教程

  • 1.基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 启动数据库服务(--dbpath后的路径代表指定数据库的路径)
mongod --dbpath c:\mongoDB\data\db
# 连接数据库
mongo
# 查看数据库
show dbs
# 切换/创建数据库
use [数据库名]
# 删除数据库
1.先切换到想要删除的数据库
2.执行命令:
db.dropDatabase()
# 创建集合并插入数据 如果集合不存在mongoDB会自动创建并插入文档
db.class_name.insert({name:"一班"})
# 删除集合
db.collection_name.drop()
  • 2.查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查找集合中的文档
db.collection_name.find()
# 以易读的方式查看查询的文档
db.collection_name.find().pretty()
# 除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

# MongoDB 的 find() 方法可以传入多个键(key),类似于sql的and
db.collection_name.find({key: 1, name:"xx"})

# 或条件查询,类似于sql的or
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]})

# AND 和 OR 联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "Mongodb中文网"},{"title": "MongoDB 教程"}]})

# 条件操作符 -- $gt 大于; $gte 大于等于; $lt 小于; $lte 小于等于; 使用如下:
db.col.find({num: {$gt: 100}}) # 查询num值大于100的数据
  • 3.更新修改和删除集合中的文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 更新集合中的数据
db.collection_name.update({更新前的数据},{更新后的数据})
# 列如:
db.user.update({x:1},{x:99})
# 如果某一条数据有多个字段,则为了避免不覆盖,应该使用$set,其为部分操作符,$set后存在的字段将被更新,不存在的不会更新,如:
db.user.update({z:1},{$set:{y:22}})
# 如果更新的数据不存在,则插入一条新数据,需要用到update第三个参数,设为true
db.user.update({z:003},{y:33},true)
# update默认值只更新找到的第一条数据,如果要求更新所有查询到的数据,则要使用$set和将第四个参数设为true.如:
db.user.update({x:"xx"},{$set:{x:"xdf"}},false,true)

# 删除数据 remove({})内的参数必填,默认删除所有找到的数据
db.user.remove({x:"22"}) # 删除找到的所有x:22的数据
db.user.remove({}) # 删除集合中所有数据
sb.user.remove({x:22},true/1) # 删除找到的第一条数据
  • 3.2 mongoDB修改器深入
1
2
3
4
5
6
7
8
9
10
11
12
# $inc 可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
db.user.update({num:2},{$inc:{num:1}}) # 每次执行对num增加1,默认只对第一个匹配的执行

# $set 用来指定一个键并更新键值,若键不存在并创建
db.a.update({"uid" : "22","type" : "3"},{$set:{"size":10}})
db.c.update({"name":"toyota"},{"$set":{"size.width":7}}) # $set通过.语法修改内嵌文档

# $unset 用来删除键. 使用时,不论对目标键使用1、0、-1或者具体的字符串等都是可以删除该目标键
db.a.update({"uid" : "02","type" : "3"},{$unset:{"size":-1}})

# 数组修改器 $push--向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须是数组;键不存在,则创建数组类型的键
db.c.update({"name" : "toyota"},{$push:{"title":"t1"}})
  • 4.索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看集合索引
db.user.getIndexes()
# 创建索引 --单一索引 -- 1 表示正序, -1 表示逆序
db.user.ensureIndex({x:1})

# 过期索引--一段时间后会过期的索引,索引过期后数据也会被清除
# 过期索引的限制:过期索引字段的值必须是指定的时间类型,即IOSDate或IOS数组,不能是时间戳
# 如果指定了时间数组,则按最小的时间进行删除
# 过期索引不能是复合索引
# 过期索引是不精确的
db.user.ensureIndex({time:1},{expireAfterSeconds:10})

# 全文索引 --索引字段"text"为必填字段 -- 一个集合只能有一个全文索引
db.user.ensureIndex({name:"text"}) #对单一字段创建全文索引
db.user.ensureIndex({"$**":"text"}) #对集合中所有字段创建全文索引
# 使用方式:
db.user.find({$text:{$search:"aa bb"}}) #在集合中查询有aa或bb字段的数据文档

db.user.find({$text:{$search:"aa -cc"}}) #在集合中查询有aa字段但不包含cc字段的文档

db.user.find({$text:{$search:"\"aa\" \"bb\""}}) #在集合中查询有aa并且有bb字段的文档

# 全文索引相似度 -- {score:{$meta:"textScore"}}
db.user.find({$text:{$search:"aa"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) # 显示相似度并根据相似度排序

# 全文索引的限制
1.每次查询只能指定一个$text
2.$text查询不能出现在$nor查询中
3.目前不支持中文
4.查询中如果包含$text,则hint将不再起作用
Mr XuJiang wechat
欢迎您扫一扫上面的微信二维码,小猪送你啦!
0%