mongoDB——shell基本命令

1. 基本概念

SQL术语/概念 MongoDB术语/概念 解释/说明
database db 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

启动monggodb的服务架构:

在这里插入图片描述

2. 文档的基本数据结构

  • 文档的基本结构:{ < key > : < value>,< key> : {< value>},… }

    • 封闭符 {}

    • 分隔符 ,

    • 连接符 :

  • 键的数据类型:UTF-8字符,可以用”“引起来,如”name“

    • < key>的用户命名规则:

      (1)‘_id’ 为保留字段key

      (2) 禁止使用’$'符号

      (3) 禁止使用’.'符号

      (4) 避免同一个{}中使用重复的

    • 值< value>的数据类型:MongoDB支持的任意数据类型

基本数据类型

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。“”
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。true/false = 1/0
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays 用于将数组或列表或多个值存储为一个键。[]
Timestamp 时间戳。记录文档修改或添加的具体时间。Timestamp()
Object 用于内嵌文档。{}
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。

3. 数据库(db)命令

// 查看当前服务器上的数据库
show dbs;
show databases;

// 选择名为mydb的数据库(如果没有则创建)
use mydb;

// 查看当前使用的数据库
db;

// 查看当前数据库的统计信息
db.stats();

// 查看当前数据库的操作信息
db.currentOp();

// 删除当前数据库
db.dropDatabase();

navicat实战:

// 创建数据库
// use 使用数据库,如果这个数据库不存在就创建
use cq 
// 函数式写法
// db = db.getSiblingDB("cq")

// 2. 查看数据库名
show databases;
// show dbs; 缩写

在这里插入图片描述


注:刚刚创建的数据库看不到,因为只是创建了一个名字,在创建集合之前没有文件生成

4. 集合(collection)与添加(insert()/one/many)

4.1集合

// 查看当前数据库中的集合
show collections;
show tables;

// 创建一个名为mycoll的集合
db.createCollection("mycoll");

// 重命名mycoll集合,新集合名叫mycollection
db.mycoll.renameCollection("mycollectioin")

// 清空一个mycollection的集合
db.mycollection.remove({});

// 删除一个mycollection的集合
db.mycollection.drop();

4.2添加

insert() 方法

注意:db.collection中,collection为你要操作的集合的名称

db.collection.insert(
   <document or array of documents>,
   {multi: false}
)

insertOne() 方法

添加一条文档记录

db.collection.insertOne(
   <document>{}
)

insertMany() 方法

添加多条文档记录 ([]方括号表示数组)

db.collection.insertMany(
   [ <document 1> {} , <document 2> {}, ... ]  --jsonArray
)

navicat实战:
insert:

// 集合(collection)可以显式的创建
db.createCollection("collectionname")

// 数据库操作命令结构: db.集合名.集合操作(参数...)
// 在集合中插入文档
// 构造文档JSON
// db.集合名.insert(文档对象)
// db.集合名.insert(文档列表对象)
var doc = {"姓名":"小趴菜", 性别:"男", 学号:"20200011", 成绩:88.8 };
// 将doc作为参数传给db.collectionname.insert函数
db.collectionname.insert(doc)

在这里插入图片描述


添加一条文档记录{“lastname”:“Tan”,“firstname”:“Guangyu”}到集合mycollection:insertone

db.mycollection.insert({"lastname":"xiao", "firstname":"pacai"});
db.mycollection.insertOne({"lastname":"xiao", "firstname":"pacai"});

在这里插入图片描述

添加一个文档数组mydocs(多条文档的数组)到集合mycollection,使用insert或insertMany方法

// 多条文档记录用[]组合到一个数组mydocs中。
// 注意 coursename处于两个花括号中,属于两个内嵌的文档,不算重复的键
var mydocs = [
    {
        "lastname" : "xiao",
        "firstname" : "pacai",
        "role" : "teacher",
        "teacher_id" : "20201111",
        "title" : "讲师",
        "courses" : [
            { "coursename" : "nosql" },
            { "coursename" : "mysql" },
            { "coursename" : "python" },
            { "coursename" : "linux" },
            { "coursename" : "kettle" }
        ]
    },
    {
        "lastname" : "xiao",
        "firstname" : "1",
        "role" : "student",
        "student_id" : "2020000001",
        "grade" : "2020",
        "class" : "1",
        "score" : 80
    },
        "firstname" : "2",
        "student_id" : "2020000002",
        "class" : "2",
        "score" : 70
    }
];
//db.mycollection.insert(mydocs);
// 3.2版后新的方法:insertMany
db.mycollection.insertMany(mydocs);

在这里插入图片描述

5. 查询(find)及操作符

5.1查询(find)

Mongo: db.集合名.find(查询条件,返回字段)

db.<collection>.find(<querydocument>, <projection>)
db.<collection>.findOne(<querydocument>, <projection>)

// 成绩大于70,id=1
db.mycollection.find({"score":{$gt:70}},{student_id:1});

查询集合mycollection中的文档

db.mycollection.find();

// 将查询结果"漂亮化"
db.mycollection.find().pretty();

// 查询集合mycollection中键为role,值为student的文档记录
db.mycollection.find( {"role" : "student"} );

// 将查询条件写入文档对象ceriteria查询
var criteria = { "role" : "student" };
db.mycollection.find(criteria);

// 使用内嵌对象的字段值查询
db.mycollection.find({"courses.coursename":"mysql"})

5.2对数值的条件查询:查询操作符

官网查询操作符

操作 操作符 范例 SQL的类似语句
等于 : db.mycollection.find({“role”:“student”}) where role= ‘student’
小于 less than $lt: db.mycollection.find({“score”:{$lt:80}}) where score < 80
小于或等于less than / equal $lte: db.mycollection.find({“score”:{$lte:80}}) where score <= 80
大于greater than $gt: db.mycollection.find({“score”:{$gt:80}}) where score > 80
大于或等于greater than / equal $gte: db.mycollection.find({“score”:{$gte:80}}) where score >= 80
不等于 not equal $ne: db.mycollection.find({“score”:{$ne:80}}) where score != 80
// Mongo: db.集合名.find(查询条件,返回字段)

// select * from table
var 查询条件 = {};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);
db.mycollection.find();  // 参数文档为空可以不写

例子:

// select * from mydb where score>70
var 查询条件 = {"score":{$gt:70}};  //  >70  ---- {$gt:70}
var 查询条件 = {"score":{$lt:70}};  //  <70  ---- {$lt:70}
var 查询条件 = {"score":{$gte:70}};  // >=70 ---- {$gte:70}
var 查询条件 = {"score":{$lte:70}};  // <=70 ---- {$lte:70}
var 查询条件 = {"score":{$ne:70}};  //  !=70 ---- {$ne:70}
var 查询条件 = {"score":{$in:[70,80]}};  //  in (70,80) ---- {$in:[70,80]}
var 查询条件 = {"score":{$nin:[70,80]}};  //  not in (70,80) ---- {$nin:[70,80]}
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

多个 条件 之间可以使用逻辑操作符and、or/in、not、exists

// AND 
var 查询条件 = {"grade":"2020","class":"1"};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

在这里插入图片描述

// OR
// 使用$or操作符
var 查询条件1 = {"class":"1"};
var 查询条件2 = {"class":"2"};
var 查询条件 = {$or:[查询条件1,查询条件2]};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

在这里插入图片描述

// 也可以使用$in操作符
var 查询条件 = {"class":{$in:["1","2"]}}; 
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

在这里插入图片描述

// NOT $not
var 查询条件 = {"score":{$not:{$gt:70}}};         // !>70  ---- {$not:{$gt:70}}
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

注意: $lte 不等价于 $not:{$gt},$not是逻辑运算,不是比较运算,是对条件结果取反集

在这里插入图片描述

// **查询不存在学生学号(studnet_id)字段**
var 查询条件 = {"student_id":{$exists:0}}
db.mycollection.find(查询条件)

在这里插入图片描述

5.3 elemMatch在数组(列表)中元素内匹配

案例:

首先利用sql语句随机生成一个学生信息表如下格式:

在这里插入图片描述


在这里插入图片描述


每一个数据格式类似如上
注意:以上信息是随机生成,如有雷同,纯属巧合

要求:
利用elemmatch匹配找出数据导入与预处理应用不及格的学生信息:

//查询数据导入与预处理应用不及格的学生信息
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
var 返回字段 = {_id:0,sno:1,name:1,grade:1,class:1};
var 返回字段 = {};
db.students.find(查询条件,返回字段)

在这里插入图片描述


只要数据导入与预处理不及格的科目:

//查询数据导入与预处理和数据只要  数据导入
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用",major:1,"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
db.students.find(查询条件,返回字段)

5.4 count统计数据

语法:

db.collection.count(查询条件)

案例:
统计所有女生人数:

db.students.count() //查询所有
var 查询条件 = {gender:0};//女生
db.students.count(查询条件);

//第二种写法
db.students.find(查询条件).count()

在这里插入图片描述

5.5 distinct获取不重复的取值

语句用法:

db.students.distinct(取值字段,查询条件)

案例:
查询2018级有哪些专业;2019级学生上的课程:

var 查询条件 = {grade:2018};
var 返回条件 = {grade:1,_id:0}
db.students.distinct("major",查询条件)

//2019级学生上的课程
db.students.distinct("courses.course",{grade:2019})

5.6 aggregate聚合管道查询

语法:

var 步骤1 = {步骤操作符:操作内容}
var 步骤列表 = [步骤1,步骤2]
db.students.aggregate(步骤列表)

案例:
统计男女生人数:

var 步骤1 = {$group:{_id:"$gender",人数:{$sum:1}}}
var 步骤2 = {$project:{性别:"$_id",人数:1,_id:0}}
var 步骤列表 = [步骤1,步骤2]
db.students.aggregate(步骤列表)

在这里插入图片描述

原文地址:https://blog.csdn.net/hexiaosi_/article/details/127472095

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc