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
    },
    {
        "lastname" : "xiao",
        "firstname" : "2",
        "role" : "student",
        "student_id" : "2020000002",
        "grade" : "2020",
        "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":"数据导入与预处理应用","score":{$lt:60}}}};
var 返回字段 = {_id:0,sno:1,name:1,grade:1,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,major: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(步骤列表)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hexiaosi_/article/details/127472095