mongodb 安装使用

安装

1 添加repo源文件

vi /etc/yum.repos.d/mongodb-org-5.0.repo

[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

2 执行yum命令进行安装

# 默认安装最新版本的
yum install -y mongodb-org



# 也可以指定特定的版本
yum install -y mongodb-org-5.0.8 mongodb-org-database-5.0.8 mongodb-org-server-5.0.8 mongodb-org-shell-5.0.8 mongodb-org-mongos-5.0.8 mongodb-org-tools-5.0.8

默认目录:

  • /var/lib/mongo(数据目录)
  • /var/log/mongodb(日志目录)
  • /etc/mongod.conf (配置文件)

3 启动

# 启动
systemctl start mongod
# 开机启动
systemctl enable mongod

# 如果修改了配置文件需要重载配置文件
systemctl daemon-reload

数据类型

  • Object ID:  文档 ID
  • String: 字符串,最常用,格式为有效的utf-8
  • Boolean: 存储一个布尔值,true或false
  • Integer: 整数可以是32或64
  • Double: 存储浮点数
  • Arrays: 数组或列表,多个值存储到一个键
  • Object: 用于嵌入式文档,即一个值 为一个文档
  • Null: 存储Null值
  • Timestamp: 时间戳,表示从1970-1-1到现在有多少秒
  • Date: 存储当前日期或时间的UNIX时间格式
# 规范注意:
1. 文档中的键/值对是有序的。
2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3. MongoDB区分类型和大小写。
4. MongoDB的文档不能有重复的键。
5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
键不能含有 \0 (空字符)。这个字符用来表示键的结尾。
. 和$有特别的意义,只有在特定环境下才能使用。
以下划线 "_"开头的键是保留的(不是严格要求的)。

使用

登录

# 默认的登录shell
# 效果等同于 mongosh "mongodb://localhost:27017"
mongosh
# 指定特定端口
mongosh --port 28015
# 指定特定 主机和端口
mongosh --host mongodb0.example.com --port 28015

# 通过账户密码认证
mongosh "mongodb://mongodb0.example.com:28015" --username alice --authenticationDatabase admin

# 连接到特定的数据库
mongosh "mongodb://localhost:27017/db1"

数据库操作

# 列出所有数据库,等同于show databases
show dbs   
# 切换数据库,如果数据库不存在默认创建
use 数据库名
# 数据库删除,主要用来删除已持久化的数据库,已经存在的数据库
db.dropDatabase()

集合操作


# 默认不存在的集合向里边添加内容会自动创建集合

# 创建一个集合
# db.createCollection(name)
db.createCollection("stu")
# 限制集合内数据数量如果超过数量值,覆盖旧数据
# capped 为true时添加上限,默认false
# size 上限大小默认为字节
# db.createCollection(name,{capped:true,size:10})
db.createCollection("stb",{capped:true,size:10})
# 查看集合
show collections
# 删除集合
db.集合名称.drop()

# 单个文档插入
# 插入数据
# db.集合名称.insert(document)
db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})

# 批量插入
# db.comment.insertMany([document1,document2])
db.comment.insertMany([
 {"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08-05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"},
 {"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"},
 {"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船长","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"},
 {"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"},
 {"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-08-06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"}
 ])


# 注意事项
时间格式YYYY-MM-DD new Date('2017-12-01')
每个文档都有一个唯一的属性, _id 
可以自己设置_id,如果不设置默认生成一个类型为objectID
objectID是一个12字节的十六进制数:
    前四个字节为当前时间戳
    接下来三个字节为机器ID
    接下来两个字节为MongoDB服务进程id
    最后三个字节为增量值

# 查询所有
# db.集合名称.find() 或 db.集合名称.find({})
db.comment.find()
# 返回第一条
# db.集合名称.findOne()
db.comment.findOne()
# 按条件查询
# db.集合名称.find({key:value})
db.comment.find({"userid":"1003"})
# 投影查询
# 如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
# db.集合名称.find({key:value},{结果1:1,结果2:1})
db.comment.find({"userid":"1003"},{nickname:1,likenum:1})
# 默认 _id 会显示,如果不想显示_id增加_id:0
db.comment.find({"userid":"1003"},{nickname:1,likenum:1,_id:0})

# 更新语法
# db.集合名称.update(查询条件,更新操作符,更新范围)
db.collection.update(query, update,{multi:<boolean>})

# 更新一整条,如果不加$set会把整条数据覆盖掉
db.comment.update({_id:"1"},{likenum:NumberInt(101)})
# 局部修改,只修改第一条
db.comment.update({userid:"1003"},{$set:{"nickname":"凯撒2"}})
# 局部修改,修改所有符合条件的数据
db.comment.update({userid:"1003"},{$set:{"nickname":"凯撒大帝"}},{multi:true})

# 某条数据列值增长
# 对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})

# 删除文档
db.集合名称.remove(<query>,{justOne:<boolean>})
参数query:可选,删除文档的条件
justOne:可选,设置为true或1,则只删除一条。默认为false,表示删除多条

# 删除所有
db.comment.remove()
# 待条件删除
db.comment.remove({_id:"1"})

进阶使用

# 统计查询
# db.collection.count(query, options)
# query 查询条件、options可选。用于修改计数的额外选项。
db.comment.countDocuments({userid:"1003"})

# 翻页
# 可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。
# db.collection.find().limit(number).skip(number)
# 如果你想返回指定条数的记录,可以在find方法后调用limit来返回结果(TopN),默认值20,例如:
db.comment.find().limit(2).skip(1)

# 排序
# sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
# db.collection.find().sort({key:1})
db.comment.find().sort({userid:1})


# 正则查询
# MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:
# db.collection.find({field:/正则表达式/}) 或 db.集合.find({字段:/正则表达式/})
db.comment.find({content:/开水/})
db.comment.find({content:/^专家/})

# 比较查询
# <, <=, >, >= 这个操作符也是很常用的,格式如下:
# $gt 大于
# $lt 小于
# $gte 大于等于
# $lte 小于等于
# $ne 不等于
db.comment.find({likenum:{$gt:1000}})

# 包含查询
# 包含使用$in操作符。
db.comment.find({userid:{$in:["1003","1004"]}})
# 不包含使用 $nin操作符。 示例:查询评论集合中userid字段不包含1003和1004的文档
db.comment.find({userid:{$nin:["1003","1004"]}})

# 条件连接查询
# 我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相 当于SQL的and) 格式为:
# $and:[ {  },{  },{ } ]
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})
# 如果两个以上条件之间是或者的关系,我们使用 操作符进行关联,与前面 and的使用方式相同 格式为:
# $or:[{  },{  },{  }]
db.comment.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})

索引

# 查看集合中的索引
# db.集合名称.getIndexes()
db.comment.getIndexes()

# 集合中创建索引
# db.集合名称.createIndex(keys,options)
# key 包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型。对于字段上的升序索引,请指定值1;对于降序索引,请指定值-1。比如: { 字段:1或-1} ,其中1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。另外,MongoDB支持几种不同的索引类型,包括文本、地理空间和哈希索引。
# options 可选。包含一组控制索引创建的选项的文档。
# 单字段
db.comment.createIndex({userid: 1})
# 复合索引
db.comment.createIndex({userid:1,nickname:-1})

# 删除索引
# db.集合名称.dropIndex(index)
db.comment.dropIndex({userid:1})


#  索引的使用
# 通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
# db.集合名称.find(query,options).explain(options)
db.comment.find({userid:"1003"}).explain()

# 关键点看: 
#     "stage" : "COLLSCAN", 表示全集合扫描
#      "stage" : "IXSCAN" ,基于索引的扫描

聚合

 

# MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
# db.集合名称.aggregate([管道:表达式])
# 分组
db.comment.aggregate([{$group:{_id:"$userid"}}])

选择切换数据库:use articledb
插入数据:db.comment.insert({bson数据})
查询所有数据:db.comment.find();
条件查询数据:db.comment.find({条件})
查询符合条件的第一条记录:db.comment.findOne({条件})
查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)
查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)
修改数据:db.comment.update({条件},{修改后的数据}) 或db.comment.update({条件},{$set:{要修改部分的字段:数据})
修改数据并自增某字段值:db.comment.update({条件},{$inc:{自增的字段:步进值}})
删除数据:db.comment.remove({条件})
统计查询:db.comment.count({条件})
模糊查询:db.comment.find({字段名:/正则表达式/})
条件比较运算:db.comment.find({字段名:{$gt:值}})
包含查询:db.comment.find({字段名:{$in:[值1,值2]}})或db.comment.find({字段名:{$nin:[值1,值2]}})
条件连接查询:db.comment.find({$and:[{条件1},{条件2}]})或db.comment.find({$or:[{条件1},{条件2}]})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值