MongoDB的基本语法

一、介绍

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象的BSON格式。字段值可以包含其他文档,数组及文档数组。

在这里插入图片描述

MongoDB的特点

MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索
引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:
(1)面向集合存储,易于存储对象类型的数据
(2)模式自由
(3)支持动态查询
(4)支持完全索引,包含内部对象
(5)支持复制和故障恢复
(6)使用高效的二进制数据存储,包括大型对象(如视频等)
(7)自动处理碎片,以支持云计算层次的扩展性
(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序
(9) 文件存储格式为 BSON(一种 JSON 的扩展)

MongoDB的体系结构

在这里插入图片描述

MongoDB 数据类型

在这里插入图片描述
基本数据类型

null: 用于表示空值或者不存在的字段, {“X”:null}
布尔型:
布尔类型有两个值true和false,{“x”:true}
数值:
shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。
浮点型:
对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}、{“x”:NumberLong(“3”)}
字符串:
UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}
日期:
日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}
正则表达式:
查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同,{“x”: /[abc]/}
数组:
数据列表或数据集可以表示为数组,{“x”: [“a”,“b”,“c”]}
内嵌文档:
文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }}
对象Id:
对象id是一个12字节的字符串,是文档的唯一标识(主键),{“x”: objectId() }
二进制数据:
二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。
代码:
查询和文档中可以包括任何JavaScript代码,{“x”:function(){/…/}}

二、安装MongoDB

使用Docker 安装

# 拉取镜像
 docker pull mongo:3.6
 # 查看镜像
 docker images
 # 创建容器
docker run --name mongo -v ~/docker/mongo:/data/db -p 27017:27017 -d mongo:3.6  
 # 查看容器
 docker ps 
 # 进入容器
 docker exec -it mongo /bin/bash

修改配置文件,开启远程连接

docker cp mongo:/etc/mongod.conf.orig /data/

将其中的
bindIp: 127.0.0.1
注释掉# bindIp: 127.0.0.1
或者改成bindIp: 0.0.0.0
即可开启远程连接



docker cp /data/mongod.conf.orig mongo:/etc/mongod.conf.orig 

在这里插入图片描述
在这里插入图片描述
使用图形工具连接
在这里插入图片描述

三、语法

总结:
集合名称就相当于表名

# 插入
db.集合名称.insert(数据)
#查找全部
db.集合名称.find()
#查询一个
db.集合名称.findOne({userid:'01'})
db.集合名称.find().limit(3)
# 修改文档
db.集合名称.update(条件,修改后数据)
# 删除全部文档
db.集合名称.remove({})
# 删除指定文档
db.集合名称.remove({_id:'1'})
# 统计条数
db.集合名称.count()
# 根据条件统计条数
db.集合名称.count({content:'内容'})
# 模糊查询   MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:/模糊查询字符串/
db.集合名称.find({字段名称:/bug/})
# 匹配content中以‘太’开头的数据
db.集合名称.find({字段名称:/^/})
# 大于 等于 小于
使用这些需要单独将该值再放入一个{}中
db.集合名称.find({ 字段名称 : { $gt: value }}) // 大于: field > value
db.集合名称.find({ 字段名称 : { $lt: value }}) // 小于: field < value
db.集合名称.find({ 字段名称 : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ 字段名称 : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ 字段名称 : { $ne: value }}) // 不等于: field != value
//查询id字段在1和2
db.集合名称.find({字段名称:{$in:["1","2"]}})
//查询id字段不在1和2
db.集合名称.find({字段名称:{$nin:["1","2"]}})
//查询访问量大于等于1000 且小于2000的数据
db.集合名称.find({$and:[ {字段名称:{$gte:1000}} ,{字段名称:{$lt:2000} }]})
db.集合名称.find({$or:[ {字段名称:{$gte:1000}} ,{字段名称:{$lt:2000} }]})
//列值增长
db.集合名称.update({字段名称:"2"},{$inc:{visits:NumberInt(2)}})

1.选择和创建数据库

use 数据库名称   # 如果数据库不存在,就自动创建

例如 创建并使用spitdb
use spitdb

在这里插入图片描述
在这里插入图片描述

2.插入与查询文档

以下命令会自动创建集合,即我们常说的表.

db.集合名称.insert(数据);   #  数据格式是BSON格式  
db.spit.insert({content:"java是第一编程语言",userid:"1011",nickname:"万能的张三",visits:NumberInt(902)})

在这里插入图片描述
在这里插入图片描述
查询全部数据:

在这里插入图片描述
在这里插入图片描述
查询结果中出现_id字段,且数据格式是ObjectID(234123as1234),是MongoDB自动生成,我们也可以指定id插入,但是id字段必须是_id

db.spit.insert({_id:"1",content:"有个bug求解决",userid:"1012",nickname:"张三",visits:NumberInt(2020)});
db.spit.insert({_id:"2",content:"分析面试经验",userid:"1013",nickname:"李四",visits:NumberInt(1023)});
db.spit.insert({_id:"3",content:"想拿高薪私聊我",userid:"1013",nickname:"王五",visits:NumberInt(111)});
db.spit.insert({_id:"4",content:"嘿嘿嘿",userid:"1014",nickname:"赵六",visits:NumberInt(1223)});
db.spit.insert({_id:"5",content:"我太难了",userid:"1016",nickname:"周期",visits:NumberInt(1255)});

在这里插入图片描述
在这里插入图片描述

3.按条件查询

//查询全部
db.spit.find()
//根据id查询   条件是bson格式
db.spit.find({_id:'1'})
//如果有多条记录返回,使用findOne命令只返回一条
db.spit.findOne({_id:'1'})

在这里插入图片描述
在这里插入图片描述

4.返回指定条数数据

在这里插入图片描述

5.修改文档

db.spit.find({_id:'1'})

在这里插入图片描述
在这里插入图片描述

注意 这样修改后就只省这一个字段了。

使用$set 修改指定字段 ,注意后面冒号:

db.spit.update({_id:'1'},{$set:{visits:NumberInt(20000)}})

6.删除文档

//删除文档
db.spit.remove({_id:'11'})

在这里插入图片描述

7.统计条数

//统计条数
db.spit.count()
db.spit.count({visits:902})

在这里插入图片描述
在这里插入图片描述

8.模糊查询

//模糊查询
db.spit.find({content:/bug/})
db.spit.find({content:/^j/})

在这里插入图片描述

9.大于小于、and、or、in、nin、inc

//访问量大于1000
db.spit.find({visits:{$gt:1000}})
//访问量小于1000
db.spit.find({visits:{$lt:1000}})
//访问量大于等于1000
db.spit.find({visits:{$gte:902}})
//访问量小于等于1000
db.spit.find({visits:{$lte:902}})
//访问量不等于1000
db.spit.find({visits:{$ne:902}})
//访问量等于1000
db.spit.find({visits:{$eq:902}})
//查询id字段在1和2
db.spit.find({_id:{$in:["1","2"]}})
//查询id字段不在1和2
db.spit.find({_id:{$nin:["1","2"]}})
//查询访问量大于等于1000 且小于2000的数据
db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})
db.spit.find({$or:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})
//列值增长
db.spit.update({_id:"2"},{$inc:{visits:NumberInt(2)}})
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu_Shihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值