Bootstrap

MongoDB Shell 基本命令(一)

MongoDB Shell 基本命令(一)

1. 基本概念

SQL术语/概念MongoDB术语/概念解释/说明
databasedb数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

2. 文档的基本数据结构

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

    • 封闭符 {}

    • 分隔符 ,

    • 连接符 :

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

      • 的用户命名规则:

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

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

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

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

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

    示例一:

    { "_id" : 1, "name" : "Zhang San" }
    

    示例二:

    { 
        "_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)

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

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

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

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

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

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

4. 集合(collection)

// 查看当前数据库中的集合
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() 方法

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

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

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

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方法

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

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

// 多条文档记录,用数组[]进行组合,用逗号分隔
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方法

// 多条文档记录用[]组合到一个数组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() 方法
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});
// 查询集合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"})

汇总操作

//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)

课堂练习:

1.创建学号+姓名(拼音)的数据库
2.创建data集合并查看该集合
3.在data集合中插入个人信息,包括:学号、姓名、性别、家庭地址、今天的所有课程等信息
4.通过find()查看刚才插入的信息,要求参数是insertedId
5.清空集合,删除集合,删除数据库
;