Mongodb基础操作

一、简介

MongoDB是一个NoSQL型的数据库,基于分布式文档型储存数据库,由C++语言编写,它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C++、PHP等多种开发语言。

二、应用场景

MongoDB适用于高并发读写、数据量大、高可扩展性和高可用性且对事务要求不高的场景,常用的应用场景有以下:

  1. 社交应用:可以使用MongoDB来存储用户信息和朋友圈动态,实现附近的人等功能。

  2. 游戏:使用MongoDB来存储用户基础信息,以及游戏中的积分、等级以及装备等用户关联信息。

  3. 物流:使用MongoDB存储订单信息,以及物流轨迹信息。

  4. 物联网:使用MongoDB存储各设备信息,以及个设备的产生的日志信息,以便于对设备进行分析、维护和预警。

  5. 视频直播:使用MongoDB来吃存储用户信息,以及用户操作日志、点赞、收藏和评价。

三、基础操作

1、创建集合

集合的创建分为隐式创建和显式创建。

显式创建:db.createCollection(name)。

隐式创建:当向一个集合插入一个文档时,如果集合不存在则会自动创建集合。

2、插入操作:

insert插入:插入单个数据。

db.user.insert({name:"张三",age:19,sex:1})

insertMany插入:插入多条数据。

db.user.insertMany({name:"李四",age:24,sex:1},{name:"王五",age:20,sex:0})

3、查询操作:

查询操作使用find()或findOne()进行查询,其中findOne()只查询出一条数据。

find查询

db.user.find({age:20},{_id:0,age:1,name:1});

// 等同于:select age,name from user where age=20;

比较查询

|------|------|-----------------------------------|
| 操作 | 操作符 | 查询格式 |
| 小于 | lt | {age:{lt:18}} // where age<18 |
| 小于等于 | lte | {age:{lte:18}} // where age<=18 |
| 大于 | gt | {age:{gt:18}} // where age>18 |
| 大于等于 | gte | {age:{gte:18}} // where age>=18 |
| 不等于 | ne | {age:{ne:18}} // where age<>18 |

db.user.find({age:{$lt:30}})

//等同于 select * from user where age<30;

逻辑查询

and查询

db.user.find({$and:{age:20},{sex:0}});

// 等同于 select * from user where age=20 and sex=0

或者缺省$and

db.user.find({age:20,sex:0})

or查询

db.user.find({or:\[{age:{lt:24}},{sex:1}]});

//等同于 select * from user where age<24 or sex=1

混合查询

db.user.find({$or:

[{sex:1},

{$and:

{age:20},{sex:0}

}]});

//等同于 select * from user where sex=1 or(age=20 and sex=0)

in 和nin 查询

db.user.find({age:{$in:18,19,20}})

//等同于 select * from user where age in (18,19,20)

db.user.find({age:{$nin:18,19,20}})

//等同于 select * from user where age not in (18,19,20)

为空查询

db.user.find({name:{$exists:1}});

//等同于 select * from user where name is not null;

分页查询

db.user.find().skip(2).limit(2).sort({age:1});

//等同于 select * from user order by age asc limit 2,2;

分组查询

使用聚合方法aggregate()。

db.user.aggregate({$group:{_id:"$sex",min_age:{$min:"$age"}}});

//等同于 select sex,min($age) from user group by sex; //获取男女中最小年龄

db.user.aggregate({$group:{_id:"$sex",sex_total:{$sum:1}}});

//等同于 select sex,count(1) from user group by sex;// 统计男女的个数

其他聚合操作

|-----------|---------------------------|--------------------------------------------------------------------------|
| 操作 | 描述 | 示例 |
| avg | 计算平均值。 | db.user.aggregate(\[{group:{_id:"sex",avg_age:{avg:"age"}}}\]) | | max | 求最大值。 | db.user.aggregate({$group:{_id:"$sex",min_age:{$max:"$age"}}}) |
| push | 将值加入一个数组中,不判断重复。 | db.user.aggregate(\[{group:{_id:"sex",name:{push:"name"}}}\]) | | addToSet | 将值加入一个数组中,会判断是重复,若重复则不加入。 | db.user.aggregate({$group:{_id:"$sex",name:{$addToSet:"$name"}}}) |
| first | 获取第一个文档数据 | db.user.aggregate(\[{group:{_id:"sex",first_name:{first:"name"}}}\]) | | last | 获取最后一个文档数据 | db.user.aggregate({$group:{_id:"$sex",last_name:{$last:"$name"}}}) |

4、更新操作

db.user.update({查询条件},{更新操作},不存在时是否插入,是否多条,异常级别)。

db.user.update({name:"张三"},{$set:{age:40}}) // 将张三的年龄修改为40

db.user.update({name:"张三"},{$inc:{age:2}}) //将张三的年龄加2

5、删除操作

删除集合(此操作慎用)

db.user.drop();

删除文档

db.user.remove({查询条件})

四、索引

1. 创建索引

db.user.createIndex({age:1}) // 创建index_age 按升序排序

2. 查看索引

db.user.getIndexes()

3. 查看索引大小

db.user.totalIndexSize()

4. 删除索引

db.user.dropIndex(索引名);

db.user.dropIndexes();//删除集合所有索引

总结:

本文主要介绍了MongoDB的常用的基础操作,操作方式主要使用的是json类型的条件语句,对json编写的要求较高,其操作和MySQL的操作基本相同,除了MongoDB没有join查询以外其他查询都支持,后续会给大家分享MongoDB的安装和主从复制等内容。

相关推荐
九零HTTP1 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner1 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈2 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶2 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全2 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
Wang's Blog3 小时前
Java 项目实战: 交友项目 - MongoDB 入门:体系结构和命令行操作
java·mongodb·交友
这个DBA有点耶3 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian3 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库
SelectDB技术团队4 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris
Elastic 中国社区官方博客4 小时前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索