MongoDB

MongoDB安装

MacOS

  • brew本来不能安装

  • 这是用于官方MongoDB软件的自定义HomebrewTap

  • 使用以下命令在MacOS终端会话中添加自定义Tap:

    brew tap mongodb/brew

  • 可正常安装

    brew install mongodb-community@4.2

如果安装了旧版本报错

删除后重新安装

    `brew untap mongodb/brew && brew tap mongodb/brew`
    `brew install mongodb-community@4.2`

除了二进制文件之外,安装还创建了:

  • the configuration file (/usr/local/etc/mongod.conf)
  • the log directory path (/usr/local/var/log/mongodb)
  • the data directory path (/usr/local/var/mongodb)

mongodb阿里云CentOS

  1. 配置yum源
    vi /etc/yum.repos.d/mongodb-org-4.2.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

  1. yum 安装
sudo yum install -y mongodb-org

配置

CentOS配置&启用

  1. 编辑配置文件 /etc/mongod.conf

    • 默认日志数据文件位置都在里面
    • 记得设置允许访问ip bindIp
  2. 用systemctl启动mongodb

sudo systemctl start mongod
# if error Failed to start mongod.service: Unit mongod.service not found.
sudo systemctl daemon-reload
  1. 验证是否成功
sudo systemctl status mongod
sudo systemctl enable mongod
  1. 停止服务
sudo systemctl stop mongod

  1. 重启
sudo systemctl restart mongod

  1. 远程登录
mongo ip/port
  1. 阿里云设置安全组

MACOS运行MongoDB社区版

  • 要将MongoDB(即mongod进程)作为macOS服务运行,请发出以下命令

    brew services start mongodb-community@4.2

  • 要将MongoDB 作为后台进程手动运行,请发出以下命令:

    mongod --config /usr/local/etc/mongod.conf --fork

两种方法都使用/usr/local/etc/mongod.conf在安装过程中创建的文件。您也可以将自己的MongoDB 配置选项添加到此文件中。

  • 要验证MongoDB是否正在运行,请mongod在正在运行的进程中进行搜索

    ps aux | grep -v grep | grep mongod

维修

  • 删除下载的.tgz档案

    brew untap mongodb/brew && brew tap mongodb/brew

  • 重试安装

    brew install mongodb-community@4.2

MongoDB使用

基础命令

  • 查看当前的数据库:

    db

  • 查看所有的数据库:

    show dbs/show databases

  • 切換数据库:

    use db_name

  • 删除当前的数据库:

    db.Dropdatabase()

  • 不用手动创建数据库
    -直接添加就会生成数据库了

关于集合

集合就是mysql的表了

  • 不手动创建集合

    向不存在的集合中第一次加入数据时,集合会被创建出来

  • 手动创建结合

    db.createCollection(name, options)

    db.createCollection ("stu")

    db.createCollection ("sub", {capped: true, size: 10})

      - 参数 capped:认值为 false 表示不设置上限,值为 true 表示设置上限
      - 参数 size:当 capped 值为 true 时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
    
  • 查看集合:

    show collections

  • 删除集合:

    db.集合名称.drop ()

数据类型

Object ID:文档 ID (文档将要存入数据库的一个个的字典)
String:字符串,最常用,必须是有效的 UTF-8
Boolean:存储一个布尔值,true 或 false 必须小写
Integer:整数可以是 32 位或 64 位,这取決于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档可以储存另一个集合
Nul:存储 Nu 山值
Timestamp:时间戳,表示从 1970-1-1 到现在的总秒数
Date:存储当前日期或时间的 UNX 时间格式

注意点

  • 创建日期语句如下:参数的格式为 YYYY-MM-DD new Date (2017-12-20)
  • 每个文档都有一个属性,为_id,保证每个文档的唯一性
  • 可以自己去设置 id 插入文档,如果没有提供,那么 Mongodb 为每个文档提供了一个独特的_id,类型为 objectId
  • objectId 是一个 12 字节的十六进制数:
    • 前 4 个字节为当前 时间戳
    • 接下来 3 个字节的 机器 ID
    • 接下来的 2 个字节中 Mongodbe 的服务进程 id
    • 最后 3 个字节是 简单的增量值

插入&保存

插入

db.集合名称.insert(document)

db.stu.insert({name: 'gi',gender: 1})

db.stu.insert({\_id: "20170101, name: 'gi', gender: 1)

插入文档时,如果不指定_id 参数,Mongodb 会为文档分配一个唯一的 ObjectId

保存

db.集合名称.save(document)

如果文档的 _id 已经存在则修改,如果文档的 _id 不存在则添加 Mongodb 插入数据

对比

  • db.collecion.insert({} 插入数据,_id 存在就报错
  • db.collection.save({}) 插入数据,_id

查询

db.集合名称.find({条件文档})

db.集合名称.findOne({条件文档}) 查一条

db.集合名称.find({条件文档}).prett() 格式化结果

更新

不加$set:会变为替换整个

db.集合名称.update({<query>, <update>, multi:<boolean>})

query:查询条件参数
update:更新操作符
multi:可选,默认是 false,表示只更新找到的第一条记录,值为 true 表示把满足条件的文档全部更新        

db.test1000.update({name: "xiaowang")}, {name: "xiaozhao"})

name 为 xiaowan 的数据替换为{name: "xiaozhao"}

db.test1000.update({name: "xiaowang"}, {$set:{name: "xiaozhao"}})

把 name 为 xiaowang 的数据 name 的值更新为 xiaozhang

db.test1000.update({name: "xiaowang"}, {$set:{name: "xiaozhao"}} ,{multi: true})

 {multi: true}达到更新多条的目的

注意:“multi update only works with $ operators”

删除

db.集合名称.remove(<query>,{justOne: <boolean>})

参数 query:可选,删除的文档的条件

参数 justOne:可选,如果设为 true 或 1, 则只删除一条,默认 false,表示删除多条

比较运算符

  • 等于:默认是等于判断,没有运算符
  • 小于:$lt (less than)
  • 小于等于:$ltb (less than equa)
  • 大于:$gt (greater than)
  • 大于等于:$gte
  • 不等于:$ne

db.stu.find({age: {$gte: 18}})

范围运算符

使用$in, $nin判断是否在某个范围内查询

查询年龄为 18、28、38 的学生

db.stu.find({age: {$in:[18, 28, 38]}})

逻辑运算符

And:在 json 中写多个条件即可
查询年龄大于或等于 18, 并且性别为 true 的学生

db.stu.find({age: {$gte: 18}}, {gender: true})

Or: 使用$or,值为数组,数组中每个元素为 json
查询年龄大于 18, 或性别为 false 的学生

db.stu.find({$or: [age: {$gte: 18}, {gender: flase}]})

查询年龄大于 18 或性别为男生,并且姓名是郭靖

db.stu.find({$or:[{age: {$gte: 18}},{gender: true}],{name: 'gj'}})

支持正则表达式

使用//$regex 编写正则表达式

abc开头,789结尾

db.products.find({sku: /^abc/})

db.products.find ({sku: {$regex: '789$'})

Limit 和 skip

  • 方法 limit ():

    用于读取指定数量的文档

    db.集合名称.find().limit(NUMBER)

    查询 2 条学生信息

    db.stu.find().limit(2)

  • 方法 skip ():

    用于跳过指定数量的文档

    db.集合名称.find.skip(NUMBER)

    db.stu.find().skip(2)

  • 同时使用

    db.集合名称.find.limit(NUMBER).skip(NUMBER)

    db.集合名称.find.skip(NUMBER).limit(NUMBER) 推荐

自定义查询*

使用$ where 后面写一个函数,返回满足条件的数据

查询年龄大于 30 的学生

db.stu.find ({
   $where: function(){
        return this age > 30;
        }
        })

投影

在查询到的返回结果中,只选择必要的字段

db.集合名称.find({}, {字段名称:1, ...]}

参数为字段与值,值为 1 表示显示,值为 0 不显

特殊:对于_id 列默认是显示的,如果不显示需要明确设置为 0

db.stu.find({},{_id: 0, name: 1, gender: 1})

排序

方法 sort (),用于对集进行排序

db.集合名称.find().sort({字段:1})

参数 1 为升序排列

参数-1 为降序排列

根据性别降序,再根据年龄升序

db.stu.find().sort({gender: -1, age: 1})

导入导出数据

导出命令:mongoexport

语法:mongoexport -d dbname -c collectionname -o filepath --type json/csv -f field

-d:数据库名

-c:集合名称

-o : 导出数据文件的路径

-type : 导出数据类型,默认json
导入命令:mongoimport

语法:mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

-d:数据库名

-c:集合名称

--file : 选择导入的文件

-type : 文件类型,默认json

-f : 字段,type为csv是必须设置此项
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值