mongoDB基本介绍

Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型,关系数据库的所使用的SQL语句自从 IBM 发明出来以后,已经有 40 多年的历史了,但是时至今日,开发程序员一般不太喜欢这个东西,因为它的基本理念和程序员编程的想法不一致。后来所谓的NoSQL 风,指的就是那些不用 SQL 作为查询语言的数据存储系统,而文档数据库 MongoDB 正是NoSQL 的代表。

  1. MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。MongoDB数据模型和你的对象在内存中的表现形式一样,一目了然的对象模型。
    . 在这里插入图片描述
    2.同一个集合中可以包含不同字段(类型)的文档对象:同一个集合的字段可能不同
    3.线上修改数据模式,修改时应用与数据库都无须下线

关系型数据库和文档型数据库主要概念对应
在这里插入图片描述
2. 获取安装包
1 wget https://fastdl.mongodb.org/linux/mongodb‐linux‐x86_64‐rhel70‐4.4.2.tgz
3. 进行解压
1 tar ‐xvzf mongodb‐linux‐x86_64‐rhel70‐4.4.2.tgz
4. 添加到系统执行路径下面( ~/.bashrc )
1 export PATH=$PATH:<你机器MongoDB bin目录,
如:/usr/local/mongodb/mongodb‐linux‐x86_64‐rhel70‐4.4.2/bin>
执行 source ~/.bashrc
5. 创建数据目录
1 mkdir ‐p /data/db # 这个路径是MongoDB默认的数据存放路径
6. 启动MongoDB服务
1 mongod # 如果你不希望使用的默认数据目录可以通过 添加 ‐‐dbpath 参数指定路径或者从后台启动
mongod --logpath /data/db/logpath/output --fork
需要指定 --logpath , 或者–syslog
出现如下图所示提示则说明服务已经启动成功
在这里插入图片描述
在这里插入图片描述

客户端使用( mongo shell, 用来操作MongoDB的javascript客户端界面 ):
7. 连接服务
1 mongo ‐‐host ‐‐port
2 # 如果在本机使用的都是默认参数,也可以直接忽略所有参数
2. 设置密码
1 use admin # 设置密码需要切换到admin库
2 db.createUser(
{
user: “gj”,
pwd: “gj123”,
roles: [ “root” ]
}
)
3 show users # 查看所有用户信息
在这里插入图片描述

  1. 停服务
    1 db.shutdownServer() # 停掉服务
  2. exit 退出 mongo
  3. 以授权模式启动
    1 mongod ‐‐auth
  4. 授权方式连接
    1 mongo ‐u gj
  5. 连上之后就可以进行操作:
    连接进来之后,就是一个命令行的窗体, 这也是JavaScript 语言的运行环境,所以可以在上面用
    javascript 进行脚本编写,执行,操作,管理数据库。

基本操作:添加数据
1 db.集合.insertOne(<JSON对象>) // 添加单个文档
2 db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档
3 db.集合.insert()

insertOne, inertMany, insert 的区别
insertOne, 和 insertMany命令不支持 explain命令
insert支持 explain命令

开始创建文档
1 db.collection.insertOne(
doc ,
{
writeConcern: 安全级别 // 可选字段
}
)
writeConcern 定义了本次文档创建操作的安全写级别简单来说, 安全写级别用来判断一次数据库写入操作是否成功,安全写级别越高,丢失数据的风险就越低,然而写入操作的延迟也可能更高。writeConcern 决定一个写操作落到多少个节点上才算成功。 writeConcern的取值包括0: 发起写操作,不关心是否成功 1- 集群中最大数据节点数: 写操作需要被复制到指定节点数才算成功majority: 写操作需要被复制到大多数节点上才算成功发起写操作的程序将阻塞到写操作到达指定的节点数为止

1 db.emp.insertOne(
{
name:“zhangsan”,
age:20,
sex:“m”}
);
在这里插入图片描述
插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为_id,ObjectId()可以快速生成的12字节id 作为主键,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性, 可以通过ObjectId(“id值”).getTimestamp() 获取创建时间。
如:ObjectId(“5fe0ef13ac05741b758b3ced”).getTimestamp();

创建多个文档
db.collection.insertMany(
[ {doc } , {doc }, …],
{
writeConcern: doc,
ordered: true/false
}
)
ordered: 觉得是否按顺序进行写入
顺序写入时,一旦遇到错误,便会退出,剩余的文档无论正确与否,都不会写入乱序写入,则只要文档可以正确写入就会正确写入,不管前面的文档是否是错误的文档
MongoDB以集合(collection)的形式组织数据,collection 相当于关系型数据库中的表,如果collection不存在,当你对不存在的collection进行操作时,将会自动创建一个collection。

整个文档查询:
db.inventory.find({}) 查询所有的文档
db.inventory.find({}).pretty() 返回格式化后的文档

条件查询:

  1. 精准等值查询
    db.inventory.find( { status: “D” } );
    db.inventory.find( { qty: 0 } );
  2. 多条件查询
    db.inventory.find( { qty: 0, status: “D” } );
  3. 嵌套对象精准查询
    db.inventory.find( { “size.uom”: “in” } );
  4. 返回指定字段
    db.inventory.find( { }, { item: 1, status: 1 } );
    默认会返回_id 字段, 同样可以通过指定 _id:0 ,不返回_id 字段
  5. 条件查询 and
    db.inventory.find({$and:[{“qty”:“0”},{“status”:“A”}]}).pretty();
  6. 条件查询 or
    db.inventory.find({$or:[{“qty”:“0”},{“status”:“A”}]}).pretty();

Mongo查询条件和SQL查询对照表
在这里插入图片描述
复合主键
可以使用文档作为复合主键
1 db.demeDoc.insert(
{
_id: { product_name: 1, product_type: 2},
supplierId:" 001",
create_Time: new Date()
}
)
注意复合主键,字段顺序换了,会当做不同的对象被创建,即使内容完全一致

逻辑操作符匹配
$not : 匹配筛选条件不成立的文档
$and : 匹配多个筛选条件同时满足的文档
$or : 匹配至少一个筛选条件成立的文档
$nor : 匹配多个筛选条件全部不满足的文档
构造一组数据:
db.members.insertMany([
{
nickName:“曹操”,
points:1000
},
{
nickName:“刘备”,
points:500
}
]);

1 $not
用法:
{ field: { $not : { operator‐expression} }}
积分不小于100 的
db.members.find({points: { $not: { $lt: 100}}} );
$not 也会筛选出并不包含查询字段的文档
2 $and
用法
{ KaTeX parse error: Expected 'EOF', got '}' at position 62: …ession2 ..... ]}̲ 昵称等于曹操, 积分大于 1…and : [ {nickName:{ $eq : “曹操”}}, {points:{ $gt:1000}}]});
当作用在不同的字段上时 可以省略 $and
db.members.find({nickName:{ $eq : “曹操”}, points:{ $gt:1000}});
当作用在同一个字段上面时可以简化为
db.members.find({points:{ $gte:1000, $lte:2000}});
3 $or
用法
1 { KaTeX parse error: Expected 'EOF', got '}' at position 47: …ondition3,... }}̲ db.members.fi…or : [
{nickName:{ $eq : “刘备”}},
{points:{ $gt:1000}}]}
);
如果都是等值查询的话, $or 和 $in 结果是一样的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值