mongodb 下载地址: https://www.mongodb.com/try/download/community
mongodb 是一个bson (类似与json格式)的nosql 数据库,没有严格的数据表格式,松散的
安装过程省略(windows一路下一步就行)
创建一个文件加 D:\mongodb\data\db 用于保存数据
找到mongodb 和 mongosh 的安装路径 找到对应的bin 目录,在环境变量中将两个bin 目录拷贝到环境变量的path 项中
windows 启动本地mongodb 服务
mongod --dbpath D:\mongodb\data\db
开启另外一个终端
https://www.mongodb.com/try/download/shell 客户端的下载地址
mongosh 本地启动客户端
mongosh --host :
use student; 切换创建数据库,需要插入数据之后才会正式创建
db.student.insertOne({"id":1,"name":"lihao1","age":20,"salary":18000.0,"address":"北京"}); //插入一条数据
db.student.insertOne({"id":2,"name":"lihao2","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":3,"name":"lihao3","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":4,"name":"lihao4","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":5,"name":"lihao5","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":6,"name":"lihao6","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":7,"name":"lihao7","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":8,"name":"lihao8","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":9,"name":"lihao9","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":10,"name":"lihao10","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":11,"name":"lihao11","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":12,"name":"lihao12","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":13,"name":"lihao13","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":14,"name":"lihao14","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":15,"name":"lihao15","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":16,"name":"lihao16","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":17,"name":"lihao17","age":20,"salary":18000.0,"address":"北京"});
db.student.insertOne({"id":18,"name":"lihao18","age":20,"salary":18000.0,"address":"北京"});
db.student.find(); //查询所有数据
db.student.find().pretty(); pretty()表示美化json 之后输出
db.student.findOne({ _id: ObjectId('68a56375e4c2397482eec4a9') }); 根据_id查询 返回所有字段
db.student.find({ id: 1 }) 根据id 查询 返回所有字段
返回指定的字段
db.student.find({_id: ObjectId("68a56375e4c2397482eec4a9")}, {name: 1, age: 1, _id: 0});
name: 1 表示包括name字段。
age: 1 表示包括age字段。
_id: 0 表示不包括_id字段。如果你想要包含_id字段,可以设置为_id: 1
db.student.countDocuments({}); 计算记录条数
db.student.count({}); 新版本已经开始弃用了
student> db.student.count({});
DeprecationWarning: Collection.count() is deprecated. Use countDocuments or estimatedDocumentCount.
18
根据条件聚合查询:
db.student.aggregate([
{ $match: { "salary":18000 } },
{ $count: "total" }
]);
//单个记录修改
db.student.updateOne(
{ _id: ObjectId("68a56375e4c2397482eec4a9") },
{ $set: { "salary": 1500 } }
);
db.student.updateOne(
{ _id: ObjectId('68a5690fe4c2397482eec4ba') },
{ $set: { "salary": 1000 } }
);
db.student.findOne({ _id: ObjectId('68a5690fe4c2397482eec4ba') });
db.student.findOne({ _id: ObjectId('68a56375e4c2397482eec4a9') });
MongoDB 中可以使用的类型如下表所示:
mongodb 的数据类型
Double
String
Object
Array
Binary
Undefined
Object
Boolean
Date
Null
RegularExpression
JavaScript
Symbol
JavaScript
32-bit integer
Timestamp
64-bit integer
Min key
Max key
关系运算符
大于(gt)、小于(gt)、小于(gt)、小于(lt)、大于等于(gte)、小于等于(gte)、小于等于(gte)、小于等于(lte)、不等于($ne)
范围之中 in, 不在范围之中 nin
存在查询(存在 $exists、null 查询)
逻辑运算查询(或者 or、等于 and、非或者 $nor 以及 not)正则查询(not) 正则查询(not)正则查询(regex)
语法
基础语法
{key: 正则标记}
完整语法
{key: {"regex":正则标记,"regex": 正则标记, "regex":正则标记,"options": 选项}}
对于 options 主要是设置正则的信息查询的标记:
"i": 忽略字母大小写
"m": 忽多行查找
"x": 空白字符串除了被转义的或在字符类中意外的完全被忽略
"s":匹配所有的字符(圆点,"."),包括换行内容
取模查询($mod)
// 语法
db.col.find({ field: { $mod: [ divisor, remainder ]} })
// 通俗的理解为:
{ field: { $mod: [ 数字, 小数位 ]} }
批量插入:
db.student.insertMany([
{"id":16,"name":"lihao16","age":20,"salary":18000.0,"address":"北京"},
{"id":17,"name":"lihao17","age":20,"salary":18000.0,"address":"广州"},
{"id":18,"name":"lihao18","age":20,"salary":18000.0,"address":"上海"}
]);
=======================================================
上面的基本使用完成之后,详细的讲解,mongodb 的sql 语句的使用
1: mongod --dbpath D:\mongodb\data\db 然后 再开一个窗口 mongosh
进入命令行客户端
2: use dbname dbname 表示数据库的名称,创建了一个空的数据库
当没有创建collection 也就是表的时候通过show dbs 命令是看不到,需要创建了collection 插入数据之后才可以看到
删除库用 db.dropDatabase(); 删除当前库
3: 创建 student 数据库
4:创建 两个表 student 和 score 表示学生信息 和考试信息表
db.createCollection("student");
db.createCollection("score");
查看当前库里的集合(表)
show collections;
5:往collection 中添加数据 单个或者批量
批量插入student:
db.student.insertMany([
{"id":19,"name":"lihao19","age":20,"salary":18000.0,"address":"北京"},
{"id":20,"name":"lihao20","age":20,"salary":18000.0,"address":"广州"}
]);
//单个插入student
db.student.insertOne({"id":21,"name":"lihao21","age":20,"salary":18000.0,"address":"北京"});
批量插入score:
db.score.insertMany([
{"id":1,"stuId":"1","ecore":90,"subject":"英语"},
{"id":1,"stuId":"1","ecore":100,"subject":"历史"}
]);
//单个插入score
db.score.insertOne({"id":1,"stuId":"1","ecore":100,"subject":"数学"});
6: 查询每个表里的全部数据
db.score.find({});
db.student.find({});
7:删除表(collection)
db.score.drop();
db.student.drop();
8:创建索引
db.score.createIndex({stuId:-1});
表示以stuId 这个字段为索引列为score表创建索引,-1 表示降序序
db.student.createIndex({name:1});
表示以stuId 这个字段为索引列为student表创建索引,1 表示升序
查看索引的集合
student> db.student.getIndexes();
{ v: 2, key: { _id: 1 }, name: '*id* ' }, { v: 2, key: { name: 1 }, name: 'name_1' }
查看索引占用的大小
student> db.student.totalIndexSize();
53248
删除所有的索引
db.student.dropIndexes();
删除指定索引:
db.student.dropIndexe("索引名称");

9: 修改文档
db.student.updateOne(
{ _id: ObjectId("68a56375e4c2397482eec4a9") },
{ $set: { "salary": 1500 } }
);
10: 删除问文档
db.student.remove({_id:ObjectId("xxxxxxx")});
========================================================
查询文档
比较运算符
表达式 | 说明 | 示例 |
---|---|---|
{key:value} | 等于 | db.student.find({"address":"广州"}); |
{key:{$lt:value}} | 小于 | db.student.find({"salary":{$lt:18000}}); |
{key:{$lt:value}} | 小于等于 | db.student.find({"salary":{$lte:1800}}); |
{key:{$gt:value}} | 大于 | db.student.find({"salary":{$gt:1800}}); |
{key:{$gte:value}} | 大于等于 | db.student.find({"salary":{$gte:1800}}); |
{key:{$ne:value}} | 不等于 | db.student.find({"salary":{$ne:18000}}); |
关联操作符
and 表示多个条件同事满足
db.student.find(
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: ...:1}, {salary:{gt:100}}
]
}
);
KaTeX parse error: Expected '}', got 'EOF' at end of input: ...id:1, salary:{gt:100}
}
);
or 只要满足多个条件中的一个
db.student.find(
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: ...:1}, {salary:{gt:100}}
]
}
);
$or:[] 不可以省略
projection 映射指定返回的字段
student> db.student.find( { id: 1 },{id:1,address:1} );
{ _id: ObjectId('68a56375e4c2397482eec4a9'), id: 1, address: '北京' }
{ id: 1 },{id:1,address:1} 表示只返回这两个字段
分页查询 linit() 和 skip()
db.student.find( { },{id:1,address:1} ).limit(0).skip(10);
排序:sort({"key":1或-1});
db.student.find( { },{id:1,address:1} ).limit(0).skip(10).sort({"address":1});
db.student.find( { },{id:1,address:1} ).limit(0).skip(10).sort({"address":-1});
1 表示升序, -1 表示降序