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

相关推荐
Elastic 中国社区官方博客2 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云2 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba2 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭3 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-3 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang3 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu4 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠4 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan5 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长5 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统