MongoDB的简单使用

MongoDB的简单使用

MongoDB系统操作

查询所有数据库

show dbs

查看当前数据库

db

切换数据库

use后面的数据库名称可以事先不用存在,再存入集合的时候才会写入mongodb中。

use mongo_test

删除数据库

进入指定的数据库,删除

use python_spider

调用:
db.dropDatabase()

显示当前数据库的集合

show collections

创建集合

1.普通创建

stu_info是你的集合名称。

db.createCollection('stu_info')

2.创建有容量的集合

参数capped:默认值为false表示不设置上限,值为true表示设置上限

参数size:当前capped为true时,需要指定此参数,表示上限大小

当文档达到上限时,会将之前数据覆盖,单位为字节

db.createCollection('teacher_info', {capped: true, size: 10})

删除集合

db.teacher_info.drop()

数据的简单操作

插入数据

插入一条数据:
db.stu_test.insertOne({name: 'test', age: 23})

插入多条数据:
db.stu_test.insertMany([{name: "ambition", age: 22}, {name: "xiaoming", age: 23}])

存在时更新数据:

save方法在高版本中可能被弃用,本人使用的是4.4

db.stu_test.save({_id: 10010, name: "xiaolan", age: 20})

数据更新

更新指定的字段,则其他字段会丢失。

db.stu_test.update({_id: 10010}, {name: "xiaowang"})

避免可以使用以下写法:
db.stu_test.update({_id: 10010}, {$set: {name: "xiaowang"}})

删除数据

删除单条

justOne=true(默认为false),删除一条

db.stu_test.remove({name: "xiaolan"}, {justOne: true})

删除多条
db.stu_test.remove({name: "xiaolan"})

查询操作

准备信息:

mongo 复制代码
use mongo_test
// 插入信息
db.stu_info.insertMany([
    {age: 20, gender: true, hometown: "蒙古", name: "郭靖"},
    {age: 18, gender: false, hometown: "桃花岛", name: "黄蓉"},
    {age: 18, gender: false, hometown: "蒙古", name: "华筝"},
    {age: 40, gender: true, hometown: "桃花岛", name: "黄药师"},
    {age: 16, gender: true, hometown: "大理", name: "段誉"},
    {age: 45, gender: true, hometown: "大理", name: "段王爷"},
    {age: 18, gender: true, hometown: "华山", name: "洪七公"}
]);
查询所有信息

db.getCollection('stu_info').find();

2.条件查询
mongo 复制代码
db.stu_info.find({age: 18});
db.stu_info.findOne({age: 18});

使用终端运行的美化输出:
db.stu_info.find().pretty()

2.1.比较运算符
mongo 复制代码
/*
* 小于:$lt
* 小于等于:$lte
* 大于:$gt
* 大于等于:$gte
* 不等于:$ne*/

// 查询年龄不等于18岁的
db.stu_info.find({age: {$ne: 18}})

// 范围查询: 查询年龄大于18岁小于50岁的
db.stu_info.find({age: {$gte: 18, $lte: 50}})
2.2.成员运算符
mongo 复制代码
// 成员运算符
db.stu_info.find({age: {$in: [18, 20]}})
2.3.逻辑运算符
mongo 复制代码
// 并且
db.stu_info.find({age: 18, gender: false})

// $or
db.stu_info.find({$or: [{age: 18}, {hometown: "桃花岛"}]})
2.4.正则表达式
mongo 复制代码
// 正则表达式
// 查询名字以段开头的
db.stu_info.find({
    name: {$regex: "^段"}
})

// 查询结尾
db.stu_info.find({
    hometown: {$regex: "古$"}
})
2.5.其他查询
mongo 复制代码
// 查询年龄小于20的前五条数据
db.stu_info.find({
    age: {$lt: 20}
}).limit(5)

// 跳过前两条数据
db.stu_info.find({
    age: {$lt: 20}
}).skip(2)

// 自定义查询
db.stu_info.find({
    $where: function () {
        return this.age >= 20
    }
})

// 查询指定字段
db.stu_info.find({age: 20}, {name: 1, age: 1, _id: 0})

排序

mongo 复制代码
// 排序
// -1 倒序
// 1 正序
db.stu_info.find().sort({age: 1})

统计

mongo 复制代码
// 统计
db.stu_info.find().count()
db.stu_info.find({
    age: {$lte: 30}
}).count()

去重

mongo 复制代码
// 数据去重
db.stu_info.distinct(
    "hometown", {age: {$lt: 18}}
    )

高阶查询

管道查询aggregate,可以将()中的第一个大括号的结果运用到第二个里面。

1.分组查询

mongo 复制代码
// 分组查询
db.stu_info.aggregate({
    $group: {
        _id: "$hometown",
        counter: {
            $sum: 1
        }
    }
});

2.求平均

mongo 复制代码
// 分组查询,获取每一组的人数和平均年龄
db.stu_info.aggregate({
    $group: {
        _id: "$gender",
        counter: {
            $sum: 1
        },
        avg_age: {
            $avg: "$age"
        }
    }
});

3.不指定分组查询

mongo 复制代码
// 不指定分组查询
db.stu_info.aggregate({
    $group: {
        _id: null,
        counter: {
            $sum: 1
        },
        avg_age: {
            $avg: "$age"
        }
    }
})

4.指定别名查询

mongo 复制代码
// 字段指定别名
db.stu_info.aggregate({
    $group: {
        _id: "$gender",
        counter: {
            $sum: 1
        },
        avg_age: {
            $avg: "$age"
        }
    }
}, {
    $project: {
        '性别': "$_id",
        '人数': "$counter",
        '平均年龄': '$avg_age',
        _id: 0
    }
})

5.match筛选

mongo 复制代码
// match筛选
db.stu_info.aggregate(
    {$match: {age: {$gt: 20}}},
    {$group: {_id: "$gender", counter: {$sum: 1}, avg_age: {$avg: "$age"}}},
    {$project: {'人数': "$counter", '平均年龄': "$avg_age", _id: 0}}
    );

// 查询年龄大于20或者归属地在大理或者蒙古
db.stu_info.aggregate(
    {
        $match: {
            age: {$gte: 18},
            hometown: {
                $in: ["蒙古", "大理"]
            }
        }
    },
    {
        $group: {
            _id: "$gender",
            counter: {$sum: 1},
            avg_age: {$avg: "$age"}
        }
    },
    {
        $project: {
            '平均年龄': "$avg_age",
            '人数': "$counter",
            "性别": "$_id",
            _id: 0
        }
    }
    )

6.分组排序

mongo 复制代码
// 排序sort
// 先按照gender分组,然后根据人数正序
db.stu_info.aggregate(
    {
        $group: {_id: "$gender", counter: {$sum: 1}, avg_age: {$avg: "$age"}}
    },
    {
        $sort: {counter: 1}
    }
)
相关推荐
我科绝伦(Huanhuan Zhou)6 分钟前
异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
数据库·mysql
Apple_羊先森8 分钟前
Oracle数据库操作深入研究:备份、数据删除与性能优化
数据库·oracle·性能优化
跟橙姐学代码1 小时前
学Python像学做人:从基础语法到人生哲理的成长之路
前端·python
Keying,,,,1 小时前
力扣hot100 | 矩阵 | 73. 矩阵置零、54. 螺旋矩阵、48. 旋转图像、240. 搜索二维矩阵 II
python·算法·leetcode·矩阵
桃源学社(接毕设)1 小时前
基于人工智能和物联网融合跌倒监控系统(LW+源码+讲解+部署)
人工智能·python·单片机·yolov8
yunhuibin2 小时前
pycharm2025导入anaconda创建的各个AI环境
人工智能·python
杨荧2 小时前
基于Python的电影评论数据分析系统 Python+Django+Vue.js
大数据·前端·vue.js·python
python-行者2 小时前
akamai鼠标轨迹
爬虫·python·计算机外设·akamai
R-G-B3 小时前
【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数)
python·opencv·视频加载·摄像头调用·获取视频基本信息·获取视频帧率·获取视频帧数
赵英英俊3 小时前
Python day46
python·深度学习·机器学习