node开发MongoDB

news/2024/11/7 14:36:13/

MongoDB

mongoDB中文文档

数据库简介

数据库:持久化存储数据的仓库

分类:

关系型数据库:mysql、oracle、sql server、db2
非关系型数据库:mongodb、redis

MongoDB简介

文档数据库,类似json结构,存储各种JSON(BSON)。mongodb版本号,偶数稳定版,奇数开发版。

下载安装(默认端口27017)

下载: `mongodb下载地址
安装:双击安装包,配置环境变量。
验证:mongod [–dbpath 路径] [–port 端口号]

MongoDB设置系统服务

mongodb安装目录创建mongodb.cfg文件

    systemLog:destination: filepath: c:\data\log\mongod.logstorage:dbPath: c:\data\db

管理员模式打开控制台参考文档

  // 安装服务sc.exe create MongoDB binPath= "\"mongo bin路径\mongod.exe\" --service --config=\"mongo路径\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"// 卸载服务sc delete MongoDB

MongoDB基本操作

MongoDB的bash命令

启动服务端:mongod
启动客户端:mongo
三个概念

数据库(database):存放集合
集合(collection):类似数组存放文档
文档(document):数据库最小单位,存储操作内容都是文档
n个文档组成集合,n个集合组成数据库

bash操作命令

show dbs、collections // 显示所有数据库、集合
use 数据库名 // 进入指定数据库
db // 显示当前数据库

MongoDB图形化工具

图形化工具:

NoSQL Manager for MongoDB Freeware 下载地址
Studio 3T 下载地址

插入、查询、修改、删除文档

插入

db.collection.insert() // 插入1或n个文档,若未指定id则自动生成
db.collection.insertOne({}) // 插入1个文档
db.collection.insertMany([{},{}]) // 插入n个文档

查询

ObjectId() // 查看生成id
db.collection.find({}) // 查询所有文档(支持n条件查询)
db.collection.findOne() // 查询1个文档
db.collection.count() // 查询文档数量

修改

db.collection.update(查询条件,新对象,{multi:true}) // 新对象替换旧对象&默认修改1个

db.collection.update({},{KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{key1:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲}) // 修改符合条件指定属…unset:{key1:key1:key1:val1}}) // 删除符合条件指定属性

db.collection.updateOne() // 修改符合1个
db.collection.updateMany() // 修改符合n个

删除(逻辑删除可代替真删除)

db.collection.remove() // 删除1个或n个,第二个参数为true标识删除1个
db.collection.deleteOne() // 删除1个
db.collection.deleteMany() // 删除多个
db.collection.drop() // 删除集合
db.dropDatabase() // 删除数据库

sort和投影

sort用法

db.collection.find() // 文档显示默认id升序
db.collection.find().sort({$key:-1}) // $key降序显示(1升序,-1降序)

投影用法(显示或隐藏指定字段)

db.collection.find({},{$key:1}) // find第2个参数(1显示,2隐藏)

文档间关系(内嵌映射)

文档间关系(1对1,,1对n,n对n)

1对1(丈夫与妻子)

db.collection.insert({name:“丈夫”,husband:{“妻子”}})

1对n(用户与订单)

db.collection.insert({orders:[订单1,订单2,…],user_id:ObjectId(“59c47e35241d8d36a1d50de0”)})

n对n(分类与商品)

db.collection.insert({goods:[商品1,商品2,…],category_id:“分类1”})
db.collection.insert({goods:[商品2,商品3,…],category_id:“分类2”})

补充

添加

db.col1.insert({}) // 插入文档

修改

db.col1.update({key:key:key:val},KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{newKey:newVal,newVal,newVal,newKey:[newVal1,newVal1,newVal1,newVal2]}) // 添加属性(支持多级嵌套)
db.col1.update({key:key:key:val},{KaTeX parse error: Expected '}', got 'EOF' at end of input: unset:{oldKey:KaTeX parse error: Expected 'EOF', got '}' at position 7: oldVal}̲}) // 删除指定属性 …key:KaTeX parse error: Expected 'EOF', got '}' at position 4: val}̲,{push:{oldKey:oldKey:oldKey:oldVal}}) // 追加文档属性$push$addToSet
db.col1.replaceOne({key:key:key:val},{newKey:newKey:newKey:newVal}) // 替换文档
自增减(KaTeX parse error: Expected '}', got 'EOF' at end of input: …ol1.update({},{inc:{key:key:key:val}});

查询

导入json文件到mongoDB数据库 // 文件导入数据
use db1 // 进入数据库
db.col1.find({}).count() // 集合查询文档数量
db.col1.find({key:key:key:val); // 集合查询文档(支持n条件,支持内嵌)

运算符(gt,gt,gt,gte、lt,lt,lt,lte、eq,eq,eq,ne):db.col1.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: key1:{gte:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲,key2:{gt:gt:gt:val1,lt:lt:lt:val2}}});
var接受查询变量 var id = db.col1.find({})[0]._id;
分页(skip,limit):db.col1.find({}).skip(n).limit(n);
多条件:db.col1.find({key1:key1:key1:val1,key2:key2:key2:val2});
条件内嵌:db.col1.find({‘key1.key1.key1.key2’:$val12});

删除

db.col1.remove({}) | drop() // 删除指定文件,清空集合

mongoose简介

1. Mongoose是通过node操作MongoDB的模块,对象文档模型(ODM)库,对原生MongoDB进行优化封装
2. 可以为文档创建模型结构(Schema),对模型中对象/文档进行验证

mongoose提供api对象

Schema(模式对象):约束数据库的文档结构
Model:所有文档标识,类似集合
Document:集合中具体文档

通过mongoose连接mongoDB

npm i mongoose // 安装
const mongoose = require(‘mongoose’); // 加载
mongoose.connection(“mongodb://host/database”,{useMongoClient: true})// 连接数据库
mongoose.connection.once(“open”,callback) // 连接数据库
mongoose.connect.once(“close”,callback) // 断开连接
mongoose.disconnect() // 断开链接

Schema和Model

Schema

支持类型:String,Number,Boolean,Array,Buffer,Date,ObjectId,Oid,Mixed

    var Schame = mongose.Schame;  // 创建Schame  var objSchame = new Schame({key: Type,key: {type: Type,default: defaultVal},...});

Model

Model表示集合,对数据库中数据进行操作

    var ObjModel = mongose.model(modelName,objSchame); // 创建Model  ObjModel.create({/*...*/},function(err){/*...*/})// 1.查询 条件,投影({name:1,_id:0} 或 "name -_id"),选项{skip:0,limit:0},回调// ObjModel.find(condition,[projection],[options],[callback]);// ObjModel.findById(condition,[projection],[options],[callback]);// ObjModel.findOne(condition,[projection],[options],[callback]);ObjModel.find({/*条件*/},{name:1,_id:0},{skip:0,limit:0},function(err,docs){/*代码逻辑*/})ObjModel.count({/*条件*/},function(err,docs){/*代码逻辑*/})// 2.创建 doc(s),回调ObjModel.create([{...},{...}],function(err){/*代码逻辑*/})// 3.修改 条件,修改后对象,配置参数,回调// ObjModel.update(condition,doc,[options],[callback])// ObjModel.updateOne(condition,doc,[options],[callback])// ObjModel.updateMany(condition,doc,[options],[callback])// ObjModel.replaceOne(condition,doc,[options],[callback])ObjModel.updateOne({'name':'value'},{$set:{'name':'value'}},function(err,docs){/*代码逻辑*/})// 4.删除// ObjModel.remove(conditions,[callback]);// ObjModel.deleteOne(conditions,[callback]);// ObjModel.deleteMany(conditions,[callback]);ObjModel.remove({'name':'value'},function(err,docs){/*代码逻辑&doc支持上述增删改查*/})

Document的方法

    // 创建Scheme// 创建Model// 创建Model实例即文档var ObjModel = new objModel({name:'tq'});ObjModel.save(function(err){/*代码逻辑*/});objModel.get('name'); // 获取指定属性值objModel.set('skill','skill'); // 设置属性值objModel.id; // 获取_idobjModel.toJSON() // 转换json对象// objModel.toObject(); // 装好object对象

mongoose的模块化

扩展

定义tools文件夹

创建conn_mongo.js文件,连接数据库

创建models文件夹

创建模型对象student.js,创建Schema,创建模型,exports(module.exports)导出

MongoDB语法

查询

db.collection.find([query],[projection]).pretty() | [count()、limit()、skip()、sort({})]
collection:集合
query:可选,查询条件
projection:可选,投影操作符
pretty:格式化显示文档
count:个数
limit:显示行数
skip:跳过几行
sort:顺序(1:正序,-1:倒序)

条件查询语句

等于:{:}
小于:{:{KaTeX parse error: Expected 'EOF', got '}' at position 4: lt:}̲} 小于等于:{:{lte:}}
大于:{:{:KaTeX parse error: Expected 'EOF', got '}' at position 4: gt:}̲} 大于等于:{:{:gte:}}
不等于:{:{:$ne:}}

AND条件

db.collection.find({key1:value1,key2:key2:key2:value2}).pretty();

OR条件

db.collection.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key1:KaTeX parse error: Expected 'EOF', got '}' at position 7: value1}̲,{key2:$value2}]}).pretty();

AND和OR联合使用

db.connection.find({key1:key1:key1:value2},KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key2:{KaTeX parse error: Expected 'EOF', got '}' at position 8: gt:"11"}̲},{key2:{$lt:“20”}}],{_id:0});

排序

db.collection().find().sort({})

不显示id

db.collection.find(条件,{_id:0})


http://www.ppmy.cn/news/2153.html

相关文章

基于Intel Lake-UP3平台的超声设备方案设计,提供出色的图形和AI性能

超声系统要求 有效的超声系统可加快诊断速度,并帮助医生更快做出更有效的治疗决策。 为此,超声机器要求极高的处理性能和图形渲染效果以提高诊断准确性,并立即获取精确的图像。 类似地,还需要易于移动以适应不断变化的医疗场景和…

新编译原理的草稿

经典编译原理似乎已经够用了,为什么要研究新编译原理呢?在四型文法中,只实现了前两型,现在用的编译原理,仍然是“上下文无关文法”。沿着文法产生式替换的思路走下去,很艰难,不如另辟蹊径&#…

可以作为艺术作品欣赏的CT三维重建技术。

什么是CT三维重建技术:简而言之就是通过螺旋CT自带的计算机软件,对扫描获得的数据进行后处理,以达到辅助医生对病变和周围组织,及其与血管的关系进行分析和显示的目的,它极大地提高了影像诊断的直观性,准确…

【MyBatis源码分析】六、MyBatis Plugins(拦截器)

六、MyBatis Plugins(拦截器) 文章目录 六、MyBatis Plugins(拦截器)拦截器的基本开发Plugins机制详解Plugins开发技巧prepare()Invocation与MetaObject开发打印Sql语句的Plugins应用场景Plugins实战开发分页插件的开发乐观锁的开发需求:如果我们要获得MyBatis在执行过程中…

第二证券|六大券商热议“第三支箭”:再融资重启修复市场预期

房地产利好方针接连出台,“第三支箭”为商场再添强心针。上星期,证监会决定在房地产股权融资方面调整优化五项办法。上市房企纷繁呼应,已有近10家房企火速筹划再融资。 时隔多年,监管再度重启房企股权融资,对房地产商场…

预训练模型之ELMO -《Deep contextualized word representations》论文笔记 + 高频面试题

😄 无聊学学罢了,非常简单的一个模型吧,算是一个比较经典的模型。ELMO更多的像是一个承上启下的角色,对于我们去了解那些词向量模型的思想也是很有帮助的。但由于同期的BERT等模型过于耀眼,使得大家并不太了解ELMO。 &…

Vue--》动态组件和插槽的使用讲解

目录 动态组件 keep-alive使用 keep-alive的include和exclude属性 插槽 动态组件 动态组件指的是动态切换组件的显示与隐藏&#xff0c;vue提供了一个内置的<component>组件&#xff0c;专门用来实现动态组件的渲染。什么意思呢&#xff1f;接着往下看&#xff1a; …

毕业设计 基于stm32的智能平衡小车 - 单片机 物联网嵌入式

文章目录0 前言1 项目背景2 设计思路3 硬件设计4 软件设计4.1 核心PID控制4.2 直立控制程序设计4.3 速度控制程序设计4.4 方向控制程序设计4.5 关键代码5 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点…