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

相关推荐
小马哥编程1 小时前
【软考架构】第6章 数据库基本概念
数据库·oracle·架构
自学也学好编程1 小时前
【数据库】PostgreSQL详解:企业级关系型数据库
数据库·postgresql
秉承初心1 小时前
Node.js 开发 JavaScript SDK 包的完整指南(AI)
开发语言·javascript·node.js
.Eyes2 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
MrZhangBaby3 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
一水鉴天4 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234564 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天4 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
TDengine (老段)4 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据