MongoDB

mysql 关系型数据库 行与列
一、什么是mongodb?
是一个文档类型的数据库,文档类似json,键值对的方式 {key:value}
mongodb是C++语言编写的

二、mongodb的特点
1、面向文档存储的数据库,关系型数据库中的‘行’在mongodb中转为了‘文档’。
2、mongodb支持多种语言:python、java、php、C++等编程语言。
3、方便管理,除了需要启动服务器外,其他的几乎不用我们管理。
4、支持丰富的表达式。操作数据的指令类似json数据。

三、词语解释
MySQL mongodb 解释
database database 数据库
table collection 表单、集合
row document 行、文档
column field 列、字段
index index 索引
primary key primary key mysql下的主键是我们定义的,mongodb下的主键是系统生成的
join 不支持多表查询

四、数据库
mongodb下可以创建多个数据库。
命名规则:
1、不能是空字符串
2、字母全部小写
3、不能包含特殊字符(空格、 .、 $、 \0 (空字符)、\等)
4、最多64个字符

MongoDB自己保留的数据库:
1、admin:root数据库,管理用户权限
2、local:存放本地服务器信息的集合
3、config:保存配置信息

五、文档
是mongodb的核心内容,一个文档就是mysql一条数据。
mongodb的文档是键值对的组合(json)

命名规则:
1、.与$在mongoDB下有意义,不能使用
2、不能含有空字符(\0), 每个字段(键)以\0结尾
3、以_下划线开头的键为系统保留键(可以正常使用,但非特殊情况不要使用)
4、区分大小写
注:
1、键(字段、key)是字符串类型
2、在同一文档下的字段不能重复
3、键值对有序排列
4、值 value 的类型任意(MongoDB支持的类型)

六、集合
集合是一组文档的组合,类似mysql下的table。
注:当集合不存在时,如果向里添加数据,会自动创建该集合。
命名规则:
1、不能含有空字符(\0), 每个集合以\0结尾
2、不能是空字符串
3、不能含有特殊字符: . $
4、不能以’system.'开头,system. 为系统保留的,不能使用

七、MongoDB支持的数据类型
String 字符串
Integer 整型
Boolean 布尔
Arrays 数组
Double 浮点数
Null 空值
ObjectId 对象id (主键 _id 使用ObjectId类型)

八、MongoDB的端口号:27017

一、启动mongoDB服务器
1、cmd打开一个窗口(以管理员身份运行)
2、如果没有配置环境变量,进入到安装目录的bin下
3、在电脑的任意位置创建一个名为data的文件夹,在data下创建一个名为db及log的文
件夹。假设db的路径为:C:\mongodb\data\db
4、如果配置了环境变量,可以在任意目录下运行以下命令
5、运行 mongod --dbpath=C:\mongodb\data\db
6、当出现27017时,代表启动成功
注:该cmd窗口为服务器端,在客户端完全断开链接之前,不要关闭。

二、启动mongoDB客户器
1、cmd打开另一个窗口(以管理员身份运行)
2、如果没有配置环境变量,进入到安装目录的bin下
3、如果配置了环境变量,可以在任意目录下运行以下命令
4、运行 mongo
5、当出现 > 时,代表链接成功

数据库 — 集合(表单) — 文档(行)
三、数据库的操作
1、查看当前已经存在的数据库
格式: show dbs 或 show databases
例子: show dbs

2、创建及使用数据库
格式: use 数据库名
例子: use students
注: 当该数据库存在时,进入并使用该数据库;当该数据库不存在
时,创建并使用该数据库。
注:新创建的数据库,该数据库下没有任何内容时,不展示该数据库;当数据库中有文档数据时,才能显示。
注:如果想要展示该数据库,添加一条文档即可
db.stu.insert({name:‘PYC’, age:23})

3、查看当前正在使用的数据库
格式:db 或 db.getName()
例子:db

4、删除数据库
格式:db.dropDatabase()
例子:use students
db.dropDatabase()
5、退出mongodb
格式: exit
例子: exit

四、集合的操作 collection-table
use 数据库名
之后命令中的db代表正在使用的数据库
1、查看当前数据库下有那些集合
格式:show collections
例子:show collections

2、创建集合
2.1、格式一
格式: db.集合名.insert(文档)
例子: db.stu1.insert({name:‘dd’})
注:当使用insert语句时,该集合存在时,在该集合下添加数据;当该集合不存在时,创建并使用该集合,新增文档。
2.2、格式二
格式: db.createCollection(集合名)
例子: db.createCollection(‘stu2’)
注:该方式创建了一个空集合

3、删除集合
格式:db.集合名.drop()
例子:db.stu2.drop()

五、文档的操作
1、添加文档
1.1、添加一条文档
格式:db.集合名.insert(文档) 文档为json类型 {key:value} 键值对用,隔开
例子:db.stu.insert({name:‘Lily’, age:23, address: ‘天津’, phone: 110, sex:1})
1.2、添加多条文档
格式:db.集合名.insert([文档1, 文档2,…])
例子:db.stu.insert([{name:‘Lucy’,age:20,address:‘北京’,phone:120,sex:1},{name:‘Lilei’,age:34,address:‘南京’,phone:199,sex:0}])
1.3、save 添加文档
格式:db.集合名.save(文档)
例子1:db.stu.save({name:‘MM’,age:20,address:‘中国’,phone:111,sex:1})
例子2:db.stu.save({’_id’:ObjectId(“5b3c7feb97fbb248ee348a30”),name:‘MM’,age:250,address:‘美国’,phone:111,sex:0})

报错

例子3:db.stu.insert({’_id’:ObjectId(“5b3c7feb97fbb248ee348a30”),name:‘MM’,age:250,address:‘美国’,phone:111,sex:0})

save可以添加数据,如果不写_id这个字段,正常添加一条数据;如果写_id这个字段,并且该字段值在之前的数据已经存在,则执行更新数据的操作。
insert可以添加数据,如果不写_id这个字段,正常添加一条数据;如果写_id这个字段,并且该字段值在之前的数据已经存在,添加失败,报错(原因:_id为主键,值不能重复)。

2、删除文档
格式:db.集合名.remove(query,{justOne : boolean})
说明:
query:删除数据的条件,与sql语句where后面的内容一样
justOne:当值为true时:删除符合条件的第一条文档。
当值为false时:删除所有符合要求的文档。
默认值false。
例子:db.stu.remove({phone:119},{justOne:true})

3、更新文档
3.1、save
格式:db.集合名.save(文档)
例子1:db.stu.save({name:‘MM’,age:20,address:‘中国’,phone:111,sex:1})
例子2:db.stu.save({’_id’:ObjectId(“5b3c7feb97fbb248ee348a30”), name:‘MM’,age:250,address:‘美国’,phone:111,sex:0})
save可以添加数据,如果不写_id这个字段,正常添加一条数据;如果写_id这个字段,并且该字段值在之前的数据已经存在,则执行更新数据的操作。

3.2、update
格式:db.集合名.update(query,update,{upsert:boolean, multi:boolean})
说明:
query:更新数据的条件,与sql语句where后面的内容一样
update:更新数据分两种情况: $set $inc
$set : 直接更新字段的值
KaTeX parse error: Expected '}', got 'EOF' at end of input: …date({age:23},{set : {name:‘LuLu’}})
例子2:db.stu.update({age:23},{KaTeX parse error: Expected 'EOF', got '}' at position 15: inc : {age:30}}̲) 例子3:db.stu.up…set : {name:‘LL’}}, {upsert: true})
db.stu.update({age:200},{KaTeX parse error: Expected 'EOF', got '}' at position 19: … : {name:'LL1'}}̲, {upsert: true…set : {name:‘LL2’}}, {upsert: false})
例子4:db.stu.update({age:34},{KaTeX parse error: Expected 'EOF', got '}' at position 20: …: {name:'LuLu'}}̲,{multi:false})…set : {name:‘LuLu’}},{multi:true})

将匹配到的整条文档直接更为 name:‘奇迹’ 慎重使用
例子5: db.stu.update({age:34},{name:‘奇迹’})

4、查询文档
4.1、查询所有文档
格式:db.集合名.find()
例子:db.stu.find()

4.2、格式化查询文档
格式:db.集合名.find().pretty()
例子:db.stu.find().pretty()

4.3、根据条件查询文档
格式:db.集合名.find(query,{key1:1, key2:1…})
说明:
query:查找数据的条件,与sql语句where后面的内容一样
key:1 : 当值为1时,代表展示该字段, 不写代表不展示

当括号中不写内容,代表查询所有。
当只有第一个参数:查找所有符合要求的文档,字段全部展示
当第一个参数为null,第二个参数有值时:查找所有文档,展示参数二中的字段

例子:
db.stu.find({age:34},{name:1,age:1})
db.stu.find({age:34})
db.stu.find(null, {name:1,age:1})
4.4、返回符合要求的第一条数据
格式:db.集合名.findOne(query,{key1:1, key2:1…})
说明:
query:查找数据的条件,与sql语句where后面的内容一样
key:1 : 当值为1时,代表展示该字段, 不写代表不展示
例子:db.stu.findOne({age:34})

六、条件
1、比较运算符
1.1、 大于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {gt : value}})
例子:db.stu.find({age: {$gt : 34}})
1.2、小于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {lt : value}})
例子:db.stu.find({age: {$lt : 34}})
1.3、大于等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {gte : value}})
例子:db.stu.find({age: {$gte : 34}})
1.4、小于等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {lte : value}})
例子:db.stu.find({age: {$lte : 34}})
1.5、等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {eq : value}})
简写格式: db.集合名.find({key: value})
例子:db.stu.find({age: {$eq : 34}})
db.stu.find({age: 34})
1.6、不等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名.find({key: {ne : value}})
例子:db.stu.find({age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: ne : 34}̲}) 1.7、大于且小于 小…lt : value, KaTeX parse error: Expected 'EOF', got '}' at position 9: gt:value}̲}) 例子:db.stu.fi…lt : 300, $gt: 35}})

2、根据主键查找数据 _id
格式:db.集合名.find({’_id’: ObjectId(’_id的值’)})
例子:db.stu.find({’_id’: ObjectId(’_id的值’)})

3、根据key的value值查找 (正则表达式 :正则表达式的写法同js中的正则)
3.1、value含有某个字符
格式:db.集合名.find({key: /字符/})
例子:db.stu.find({name: /M/})
3.2、value以某个字符开头
格式:db.集合名.find({key: /^字符/})
例子:db.stu.find({name: /^A/})
3.3、value以某个字符结尾
格式:db.集合名.find({key: /字符KaTeX parse error: Expected 'EOF', got '}' at position 2: /}̲) 例子:db.stu.fin…/})

4、逻辑运算符
4.1、逻辑与 KaTeX parse error: Expected '}', got 'EOF' at end of input: …式:db.集合名.find({and : [条件1, 条件2, …]})
简写格式:db.集合名.find({条件1, 条件2, …})
例子:db.stu.find({$and : [{age:250}, {address:‘美国’}]})
简写例子:db.stu.find({age:250,address:‘美国’})
4.2、逻辑或 KaTeX parse error: Expected '}', got 'EOF' at end of input: …式:db.集合名.find({or : [条件1, 条件2, …]})
例子:db.stu.find({$or : [{age:250}, {address:‘美国’}]})
4.3、逻辑非 KaTeX parse error: Expected '}', got 'EOF' at end of input: …名.find({key : {not : {条件}}})
例子:db.stu.find({age:{KaTeX parse error: Expected '}', got 'EOF' at end of input: not:{lt: 34}}})
4.4、逻辑与与逻辑或合用
格式:db.集合名.find({条件1,条件2,… ,KaTeX parse error: Expected 'EOF', got '}' at position 18: …:[条件1,条件2.....]}̲) 例子:db.stu.fin…or:[{name:‘MM’},{sex:1}]})

5、范围查找
5.1、范围内 KaTeX parse error: Expected '}', got 'EOF' at end of input: …名.find({key : {in : array}})
例子:db.stu.find({age:{$in: [34,26,45,700]}})
5.2、范围外 KaTeX parse error: Expected '}', got 'EOF' at end of input: …名.find({key : {nin : array}})
例子:db.stu.find({age:{$nin: [34,26,45,700]}})

七、返回文档的个数
格式:db.集合名.find(query).count()
query:查询条件,可以省略(如果不写条件,代表查找所有)
例子:db.stu.find().count()

八、排序
格式:db.集合名.find(query).sort({key:1|-1})
1:升序
-1:降序
query:查询条件,可以省略(如果不写条件,代表查找所有)
例子:db.stu.find().sort({age:1})
例子:db.stu.find().sort({age:-1})

九、分页查询
1、limit 返回数据条数
格式:db.集合名.find(query).limit(num)
query:查询条件,可以省略(如果不写条件,代表查找所有)
num:代表返回的数据条数
例子:db.stu.find().limit(4)
2、skip 跳过多少条后查询数据
格式:db.集合名.find(query).skip(num)
query:查询条件,可以省略(如果不写条件,代表查找所有)
num:代表跳过的数据条数
例子:db.stu.find().skip(2)
3、分页效果 将skip与limit合用
格式:db.集合名.find(query).skip(num1).limit(num2)
query:查询条件,可以省略(如果不写条件,代表查找所有)
num1:代表跳过的数据条数
num2:代表返回的数据条数
例子:db.stu.find().skip(0).limit(5)
db.stu.find().skip(5).limit(5)
db.stu.find().skip(10).limit(5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值