nodejs mongodb基础

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 表示降序

相关推荐
AllData公司负责人1 小时前
AllData数据中台-数据同步平台集成开源项目Seatunnel-Web,完成Mysql到Doris同步流程
数据库·mysql·开源
Mr.Entropy1 小时前
数据库读写分离介绍
数据库
Codeking__1 小时前
Redis的value类型及编码方式介绍——string
数据库·redis·缓存
Hilaku1 小时前
我是如何用一行 JS 代码,让你的浏览器内存瞬间崩溃的?
前端·javascript·node.js
五仁火烧1 小时前
npm run build命令详解
前端·vue.js·npm·node.js
前端付豪2 小时前
NodeJs 做了什么 Fundamentals Internals
前端·开源·node.js
ShuiShenHuoLe2 小时前
maven配置阿里源
java·数据库·maven
码农爱学习2 小时前
C语言结构体对齐是怎么计算
java·c语言·数据库
小杨同学492 小时前
C 语言实战:堆内存存储字符串 + 多种递归方案计算字符串长度
数据库·后端·算法
小码编匠2 小时前
完美替代 Navicat,一款开源免费、集成了 AIGC 能力的多数据库客户端工具!
数据库·后端·aigc