MongoDB基本使用

常用命令
  • mongod --version 检测mongodb版本
  • mongod 开启数据库
  • mongo 连接数据库
  • show dbs & show databases 显示当前所有数据库
  • use test 进入/切换数据库
  • db 表示当前所处数据库
  • show collections 显示数据库中的所有集合
创建删除数据库
  • use mydb 创建(切换)数据库(里面如果不创建集合或者不插入数据,默认不显示)
  • db.dropDatabase() 删除数据库,删除之前使用use切换到对应的数据库
  • show dbs 查看所有数据库
  • db 查看当前数据库
创建和删除集合
  • db.createCollection('animal_type') 给数据库中创建集合,创建之前使用use切换到对应数据库 (直接插入数据会自动创建集合)
  • show collections || show tables 查看当前数据库下的所有集合
  • db.animal_type.drop() 删除数据库中的集合
插入文档
  • db.students.insert({name: '张三', age: 23, sex: '男'});

  • db.students.insertOne({name: '李四', age: 24, sex: '女'})

  • db.students.insertMany([]) 插入多条数据:

    db.students.insertMany([
        {name: '王麻子', age: 34, sex: '男'},
        {name: '刘二', age: 25, sex: '女'}
    ]);
    
  • db.students.save({name: '米语', age: 22, sex: '男'}) 如果不指定 _id 字段 ,save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

查找文档
  • db.students.find() 查询数据
  • db.students.find().pretty() pretty() 方法以格式化的方式来显示所有文档。
  • db.students.findOne() 返回一个格式化的文档
  • db.students.distinct('name') 查询去掉后的当前聚集集合中的某列的重复数据
条件查询
  • db.students.find({name: '米语', age: 23}) 查询name="米语"并且age=23的文档

  • db.students.find({$or: [{key: value}, {key: value}]}) 查询name="米语"或者age=23的文档

    db.students.find({
        $or: [
            {name: '米语'},
            {age: 23}
        ]
    })
    
  • db.students.find({age: {$gt: 25}}) 查找年龄大于25的

  • db.students.find({age: {$gte: 25}}) 查找年龄大于等于25的

  • db.students.find({age: {$lt: 23}}) 查找年龄小于23的

  • db.students.find({age: {$lte: 23}}) 查找年龄小于等于23的

  • db.students.find({age: {$gte: 23, $lte: 25}}) 查找年龄大于等于23小于等于25的

  • db.students.find({age: {$eq: 23}}) || db.students.find({age: 23}) 查找年龄等于23的

  • db.students.find({age: {$ne: 23}}) 查找年龄不等于23的

  • db.students.find({}, {name: 1, age: 1}) 查询指定列name,age数据

  • db.students.find({age: {$gt: 23}}, {name: 1}) 查询age大于23的指定列name

模糊查询
  • db.students.find({name: /米/}) 查找包括‘米’字的文档
  • db.students.find({name: /^米/}) 查找以‘米’开头的文档
  • db.students.find({name: /语$/}) 查找以‘米’结束的文档
排序
  • db.students.find().sort({age: 1}) 以年龄进行升序排序
  • db.students.find().sort({age: -1}) 以年龄进行降序排序
Limit与Skip方法
  • db.students.find().limit(2) 查询前2条数据
  • db.students.find().skip(2) 跳过前2条,查询第2条以后的数据
  • db.students.find().skip(2).limit(2) 查询2到4之前的数据(可用于分页)
count总数
  • db.students.find().count() 总共多少条数据
  • db.students.find({age: {$lte: 23}}).count() 统计大于等于23的总数
  • db.students.find().skip(3).limit(2).count(true) 要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)
更新文档
  • db.students.update({name: '米语', age: 23}, {$set: {name: '梁璐'}}) 查找name=‘米语’,age=23的文档,把name更改为’梁璐’
  • db.students.update({age: {$gt: 23}}, {$set: {sex: '男'}}, {multi:true}) 查找年龄大于23的,将性别更改为‘男’, multi更改所有匹配的数据,默认只更改第一条匹配的数据
删除文档
  • db.students.remove({name: '米语'}) 删除name=‘米语’的文档
  • db.students.remove({age: 23}, {justOne: true}) 移除匹配的第一条数据
  • db.students.remove({}) 删除所有文档数据
索引

索引通常能够极大的提高查询效率和查询时间。

// 添加多条数据
for (var i = 0 ; i < 2000000; i++) {
    db.students.insert({name: ('张三' + i), order: i});
}
  • db.students.createIndex({name: 1}) 创建索引
  • db.students.getIndexes() 查看索引
  • db.students.dropIndex({'name': 1}) 删除集合指定索引
  • db.students.dropIndexes() 删除集合所有索引
  • db.students.totalIndexSize() 查看集合索引大小
  • db.students.createIndex({name: 1, order: -1}) 复合索引 , 数字 1 表示 username 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储。
使用 explain

explain 是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用
该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标本身。

db.students.find({name: '张三444444'}).explain( "executionStats" )
聚合
db.students.insertMany([
    {name: '张三', age: 23, sex: '男', rank: 88},
    {name: '李四', age: 44, sex: '女', rank: 99},
    {name: '王麻子', age: 34, sex: '女', rank: 75},
    {name: '汪汪', age: 39, sex: '男', rank: 89}
])
  • 先按照性别分组,然后获取每组的数量
db.students.aggregate([
    {$group: {_id: '$sex', num: {$sum: 1}}}
])

在这里插入图片描述

  • 计算总分
db.students.aggregate([
    {$group: {_id: null, result: {$sum: '$rank'}}}
])

在这里插入图片描述

  • 获取总数据
db.students.count()

在这里插入图片描述

  • 获取总条数
db.students.aggregate([
    {$group: {_id: null, count: {$sum: 1}}}
])

在这里插入图片描述

  • 获取ID对应的年龄总数
db.students.aggregate([
    {
        $group: {_id: '$_id', total: {$sum: '$age'}}
    }
])

在这里插入图片描述

  • 按rank分组,获取每组中最大的
db.students.aggregate([
    {
        $group: {
            _id: '$rank', max: {$max: '$name'}
        }
    }
])

在这里插入图片描述

  • 按rank分组,获取每组中最小的
db.students.aggregate([
    {
        $group: {
        _id: '$rank', max: {$min: '$name'}
        }
    }
])

在这里插入图片描述

  • 过滤,返回指定的列
db.students.aggregate([
    {
        $project: {name: 1}
    }
])

在这里插入图片描述

  • 多管道
db.students.aggregate([
    {$match: {age: {$gt: 34, $lt: 64}}},
    {$group: {_id: '$rank', count: {$sum: 1}}}
])

在这里插入图片描述

  • skip
db.students.aggregate({$skip: 4})

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值