node开发MongoDB
创始人
2024-03-23 01:09:26
0

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})

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...