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支持的任意数据类型
示例一:
{ "_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.清空集合,删除集合,删除数据库