MongoDB Shell 基本命令(一)

MongoDB Shell 基本命令(一)

1. 基本概念

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

2. 文档的基本数据结构

  • 文档的基本结构:{ : , : {}, ... }

    • 封闭符 {}

    • 分隔符 ,

    • 连接符 :

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

      • 的用户命名规则:

        (1)'_id' 为保留字段key

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

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

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

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

    示例一:

    json 复制代码
    { "_id" : 1, "name" : "Zhang San" }

    示例二:

    json 复制代码
    { 
        "_id" : ObjectId("5e746c62040a548ab32fff13"),  //ObjectId对象
    	"name" : "Zhang San",  // 字符串
        "age" : 18,			   // 数字(Double)
    	"alive" : true,        // 布尔值
    	"hobbies" : ["Anime","Comic","Game", 19, false,[1,2,3],{a:1}],  // 数组
    	"body": {
    				"height" : 170,
    				"weight" : 65
    			},                             // Object 内嵌文档
        "courses" : [
                { "coursename" : "nosql" },
                { "coursename" : "mysql" },
                { "coursename" : "python" },
                { "coursename" : "linux" },
                { "coursename" : "kettle" }
            ]								   // 内嵌文档的数组
    }
  • 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)

js 复制代码
// 查看当前服务器上的数据库
show dbs;
show databases;

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

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

// 查看当前数据库的统计信息,由于没有插入相关信息,基本上为空值
db.stats();

// 查看当前数据库的操作信息,返回当前正在执行的操作
db.currentOp();

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

4. 集合(collection)

js 复制代码
// 查看当前数据库中的集合
show collections;
show tables;

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

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

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

// 删除一个名为mycollection的集合 如果数据库没有任何集合时,数据库会被自动删除。
db.mycollection.drop();

4.1 添加文档到集合

insert() 方法

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

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

添加一条文档记录

db.collection.insertOne(
   <document>{}
)
insertMany() 方法

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

json 复制代码
db.collection.insertMany(
   [ <document 1> {} , <document 2> {}, ... ]  --jsonArray
)

添加一条文档记录{"lastname":"zhang", "firstname":"ren"}到集合mycollection

json 复制代码
db.mycollection.insert({"lastname":"zhang", "firstname":"san"});
//返回id,比较好用,直接得到结果,进一步获取到ObjectID
db.mycollection.insertOne({"lastname":"zhang", "firstname":"san"});
var result = db.mycollection.insertOne({"lastname":"zhang", "firstname":"san"});
var newdoc_id = result.insertedId
//可以通过find()命令查找,如果不使用bson格式会报什么错误?
db.mycollection.find({_id:newdoc_id})//通过id找到对应信息

添加一个文档记录对象mydoc到集合mycollection, 使用insert或insertOne方法

json 复制代码
var mydoc = {"lastname":"Zhang", "firstname":"San"};
db.mycollection.insert(mydoc);
// 3.2版后新的方法:insertOne
db.mycollection.insertOne(mydoc);

添加多条记录到集合mycollection,使用insert或insertMany方法

js 复制代码
// 多条文档记录,用数组[]进行组合,用逗号分隔
db.mycollection.insert(
[
    {"lastname":"Zhang", "firstname":"san", "role":"teacher", "teacher_id":"2023409", "title":"教师", "courses":[{"coursename":"nosql"},{"coursename":"sqlserver"}]},
    {"lastname":"Zhang", "firstname":"San", "role":"student", "student_id":"2022000000", "grade":"2022", "class":"1", "score":80}
]
);

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

json 复制代码
// 多条文档记录用[]组合到一个数组mydocs中。
// 注意 coursename处于两个花括号中,属于两个内嵌的文档,不算重复的键
var mydocs = [
    {
        "lastname" : "Zhang",
        "firstname" : "San",
        "role" : "teacher",
        "teacher_id" : "2023409",
        "title" : "教师",
        "courses" : [
            { "coursename" : "nosql" },
            { "coursename" : "mysql" },
            { "coursename" : "python" },
            { "coursename" : "linux" },
            { "coursename" : "kettle" }
        ]
    },
    {
        "lastname" : "Zhang",
        "firstname" : "Yi",
        "role" : "student",
        "student_id" : "2022000001",
        "grade" : "2022",
        "class" : "1",
        "score" : 80
    },
    {
        "lastname" : "Tan",
        "firstname" : "Er",
        "role" : "student",
        "student_id" : "2022000002",
        "grade" : "2022",
        "class" : "1",
        "score" : 70
    }
];
db.mycollection.insertMany(mydocs);
// 3.2版后新的方法:insertMany

4.2 查询文档记录

find() 方法
js 复制代码
db.<collection>.find(<querydocument>, <projection>)
db.<collection>.findOne(<querydocument>, <projection>)

select <projection> from <collection> where <querydocument>
select student_id from mycollection where score > 70;
db.mycollection.find({"score":{$gt:70}},{student_id:1});
js 复制代码
// 查询集合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"})

汇总操作

json 复制代码
//1.创建数据库
//use 使用数据库,如果这个数据库不存在就创建
use cqust
db = db.getSiblingDB("cqust")
//Note:刚才创建的数据库看不到,没有显示,因为只是创建了一个名字,在创建集合前没有文件生成
//2.查看数据库名
show databases;
//可以简写为:
show dbs;
//3.集合(collection)可以显示的创建,执行完该条语句,便创建了cqust数据库,以及集合
//也可以不显示创建
db.createCollection("collectionname");
//4.在集合中插入文档
//数据库操作命令: db.集合名.集合操作(参数...)
//构造文档JSON 重复字段自动过滤掉
//db.集合名.insert(文档对象)
//db.集合名.insert(文档列表对象)
//构造文档JSON 重复字段自动过滤掉
var doc={"姓名":"张三",性别:"男",学号:"2023409",课程:"分布式数据库原理",成绩:90,学号:"2023409"};
db.collectionname.insert(doc)

课堂练习:

json 复制代码
1.创建学号+姓名(拼音)的数据库
2.创建data集合并查看该集合
3.在data集合中插入个人信息,包括:学号、姓名、性别、家庭地址、今天的所有课程等信息
4.通过find()查看刚才插入的信息,要求参数是insertedId
5.清空集合,删除集合,删除数据库
相关推荐
DEARM LINER15 分钟前
mysql 巧妙的索引
数据库·spring boot·后端·mysql
码农幻想梦1 小时前
实验九 视图的使用
前端·数据库·oracle
影子落人间1 小时前
Oracle创建存储过程,创建定时任务
数据库·oracle
大G哥1 小时前
02、Oracle过滤和排序数据
数据库·oracle
代码吐槽菌3 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
伏虎山真人3 小时前
开源数据库 - mysql - 组织结构(与oracle的区别)
数据库·mysql·开源
精致先生4 小时前
问题记录01
java·数据库·mybatis
Channing Lewis4 小时前
salesforce developer console 匿名执行是以什么身份执行的
数据库·安全·salesforce
双子座断点4 小时前
QStringList 使用详解
数据库
bw8767206874 小时前
金融工程--pine-script 入门
数据库·金融