——萧伯纳 前言 在大数据的驱使下,我们要实现数据持久化存储,数据共享,数据集中管理数据库是不二之选,小编在这里要阐述的是 mongodb 数据库,mongodb[1]是一个基于分布式文件存储的开源数据库系统...image.png 1.3 数据库的基本操作 显示表 show dbs; 切换数据库 use test; 插入数据 db.test.insert({name:"vivo"}); 查询数据 db.test.find...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。...有人可能会问为什么 ObjectId 可以做唯一标识符呢,不会重复吗?...2.5 ObjectId 一个 ObjectId 其实可以分割为四部分,即当前时间戳,当前主机的hash,当前进程id,自动增加的计数器,有了这几个基本上就可以保证它的唯一性了。
命令行操作 基本测试指令 // helloworld.js // 查询所有数db据库 show dbs // 切换/创建数据库,当创建一个集合(table)的时候会自动创建当前数据库 use test...可见mongo的语法非常适合前端。...(); ODM - Mongoose 对于mongo,有时候也想直接在程序中定义模型。...也需要一个odm工具来方便更好的操作。而mongoose就是i 一个良好的工具。 mongoose是一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。...如果我要实现某篇文章的评论统计的功能。
hero 的文档 // MongoDB 支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配 // 如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号(单双引号均可)...(modelName, schema): // modelName 就是要映射的集合名称,mongoose 会自动将集合名称变成复数。...(modelName, schema): // modelName 就是要映射的集合名称,mongoose 会自动将集合名称变成复数。..._id); // id 是 Document 对象的属性,而 _id 是 js 对象的属性 } }); 4.10 Mongoose 的模块化 1、定义一个模块,用于连接 MongoDB 数据库.../utils/conn_mongo"); 2、定义一个模块,用于定义具体的模型对象 第一种方式: student.js var mongoose = require("mongoose"); var Schema
文件数据库 数据库的本质是存储数据,我们平时用的文件本身也是存储数据,那么我们只要制定一个规范,那普通文件也可以是一个数据库,而且普通文件不依赖环境,你不必安装引擎或者工具之类的才能操作,它是操作系统自带的能力...启动镜像, -p 暴露27017端口, # 下面的文件路径要替换成你的机器上的一个要存放db文件的文件路径,比如我在 ~/Desktop/Practice-book/nodejs/db/mongodb...安装mongoose cnpm i --save mongoose 示例: const mongoose = require('mongoose'); mongoose.connect('mongodb...还有最大的亮点就是支持SQL语句了,有了SQL语句很多复杂的查询都可以被实现,如多个表之间的操作便可以通过一个SQL语句实现,非常便捷。...首先可以根据需求要提供两个接口,一个是内部人员使用的开关接口,另一个是提供给前端使用的数据接口。b.
.update({查询条件},{新对象},{配置}) 默认只修改一个 db..updateOne({查询条件},{新对象}) 修改一个符合条件的文档 db....(modelName, Schema); // modelName 是要映射的集合名 // mongoose 会自动将集合名变成复数 let StuModel = mongoose.model('student..., _id: 0} "name age -_id" options 查询选项(skip limit) callback 回调函数。..._id } }); 模块化连接 定义一个模块连接数据库 // tools/conn_mongo.js const mongoose = require('mongoose'); mongoose.connect.../tools/conn_mongo'); 定义一个模块,操作 Student 模型 // models/student.js const mongoose = require('mongoose');
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect 用这个地址生成的二维码也是密密麻麻...那与其这样,不如我们自己来实现一个短链接平台吧,实现一个短链接平台原理上也非常简单,搞定两部分就行了:1.保存长短链接的对应关系。2.通过短链接查询长连接并重定向。...这里的mongoose就是npm的一个包,主要是为程序提供连接mongodb并增删查改的功能。...db"); 数据库模型定义 因为我们的对应关系是需要通过短链接查询长连接,所以这里我们主要以存储短链接和长连接为主,另外大家也可以根据自己需要添加链接点击统计之类的字段,方便后期统计。 ...接收短链接码 var shortUrl = req.params.shortUrl; 连接数据库查询并跳转 mongoose.connect(setup.mongo_db, setup.mongo_options
(modelName, Schema); // modelName 是要映射的集合名 // mongoose 会自动将集合名变成复数 let StuModel = mongoose.model('student...], [options], [callback]) 查询符合条件的第一个文档 conditions 查询条件 projection 投影 需要获取的字段 两种方式 {name: 1, _id:...0} "name age -_id" options 查询选项(skip limit) callback 回调函数。..._id } }); 模块化连接 定义一个模块连接数据库 // tools/conn_mongo.js const mongoose = require('mongoose'); mongoose.connect.../tools/conn_mongo'); 定义一个模块,操作 Student 模型 // models/student.js const mongoose = require('mongoose');
副本集包含多个数据节点和一个仲裁节点。在数据承载节点中,只能含有一个主节点,其他节点被视为复制节点。 ? 复制节点复制主节点的 oplog 并将操作应用于其数据集,使得复制节点成为主节点的一个镜像。...id" : 0,"host" : "mongo1:8410"}]} rs.initiate(cfg); 效果如图: ?...mongoose 连接测试 const mongoose = require("mongoose"); const uri = "mongodb://mongo1:8410,mongo2:8411...cat id_rsa.pub 复制内容 mongo2 cd ~/.ssh/ vim authorized_keys 将刚才复制的添加最后。...下面我们用认证方式来进行登录。 ./bin/mongo 127.0.0.1:8410 -u "root" -p "root" --authenticationDatabase "admin" ?
mongod --dbpath=文件夹路径 4.启动mongodb, mongo 连接mongodb数据库的命令: 1.进入MongoDB下的bin文件夹下--cd 路径 2.命令--mongod...--dbpath=C:\Users\lx\Desktop\Node\MongoDB\DB 3.再打开一个cmd 4.重复第一步--cd 路径 5.命令--mongo const mongoose...= require('mongoose'); let db=mongoose.connect('mongodb://localhost/tenDB', {useNewUrlParser: true}...,系统会自动创建一个 * */ let schema=new mongoose.Schema({ name:{type:"String",default:"无名"},...2.一个数据库中可以存放多张表 3.每张表都有字段(比如姓名, 年龄) 4.表中会有一个特殊的字段(主键), 用于保证数据的唯一性 MySQL的管理系统: phpMyAdmin 通过代码操作数据库
, { timestamps: true }); return mongoose.model('Token', TokenSchema); }; 复制代码 还准备了一个公共的BaseController...= { code, message, errors, }; } } module.exports = BaseController; 复制代码 总算要开始我们的用户..._id) { this.success({ token }); } } else { this.error('用户名或密码错误'); } 复制代码 用户信息获取接口编写 获取用户信息的接口将只需要传递...token即可; 我们通过将接收到的token进行Mongo查询,成功查询说明Token正常; 通过验证token正确性得到被写入的用户名; 我们在通过用户名查询Mongo中对应的详细信息,成功查询后相应前端接口数据...,成功查询说明token正常; 这时候我们只需要删除token,成功响应前端接口数据即可。
为什么要用node 最主要的一点是其他语言咱也不会啊。。。 ?...Typescript 网上特别多关于“为什么要用Typescript开发”,“Typescript开发的好处和坏处”,“为什么不用Typescript开发”等等的争论和文章,有兴趣的同学也可以去说道说道哈...本次项目用ts主要是出于以下几点考虑: 本人在持续的学习ts中,“纸上得来终觉浅,绝知此事要躬行”,需要更多的ts实战才能加深对ts的了解 自己的项目,想用什么就用什么 写起来逼格会相对高一些 Ts有诸多...不过这个项目除了使用mysql,也还有用到mongo,接下来看看mongodb怎么用 使用mongoose作为mongodb的中间件 // mongoose入口 import mongoose from...login_id: number | string; // 登录日志id sub?
_id可以自已插入 3.一个表中不一定要字段都相同 那它们有什么区别? ? ...从图中操作就可以看出,虽然insert和save方法都可以插入数据,当默认的“_id”值已存在时,调用insert方法插入会报错;而save方法不会,会更新相同的_id所在行数据的信息 查询 查询表中所有数据...上面看到了AND的关系,或者的关系应该怎么用? 或者:$or ? in和not in查询(包含、不包含) $in $nin ? ...修改 前面save在_id字段已存在是就是修改操作,按指定条件修改语法如下 db.表名.update({"条件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});...“admin”数据库 用CMD中使用mongo.exe操作时,插入中文遇一了问题,原因是MongoDB默认编辑是utf-8,而CMD是GBK,所以在CMD窗口中执行这个命令修改编辑即可:chcp 65001
写在最前面 使用 node 完成一个 todolist app 的 server 端,其中包括基本的 ts 配置方案和完成了 Models 和 Controler 层。...required: true, }, }, { timestamps: true } ) export default model("Todo", todoSchema) 创建一个类型库定义...我们需要传相关的 id 确定具体的 list。...5、MongoDB 数据库配置 nodemon.json { "env": { "MONGO_USER": "your-username", "MONGO_PASSWORD...}:${process.env.MONGO_PASSWORD}@cluster0.4qpw4.mongodb.net/${process.env.MONGO_DB}?
SpaceX-API 是一个用于火箭、核心舱、太空舱、发射台和发射数据的开源 REST API(并且是使用Node.js编写,我们用这个项目借鉴无可厚非) 为了阅读的舒适度,我把下面的正文尽量口语化一点...": "^5.11.8", "mongoose-id": "^0.1.3", "mongoose-paginate-v2": "^1.3.12", "eslint": "^7.16.0...": "^5.11.8", "mongoose-id": "^0.1.3", "mongoose-paginate-v2": "^1.3.12", "pino": "^6.8.0.../services'); const app = new Koa(); mongoose.connect(process.env.SPACEX_MONGO, { useFindAndModify...但是登录后,你只能做你权限内的事情,例如你只是一个打工人,你说你要关闭这个公司,那么对不起,你的状态码此时应该是403 回到admin 此刻的你,想要清空这个缓存,调用/admin/cache接口,那么首先要经过
", "MONGO_DB": "your-db-name" } } 你可以在 MongoDB Atlas,通过创一个新集群来得到凭据。...}:${process.env.MONGO_PASSWORD}@clustertodo.raz9g.mongodb.net/${process.env.MONGO_DB}?...然后,我们用 mongoose 包,通过读取 nodemon.json 带凭证的 url 去连接 MongoDB。...用 React 和 TypeScript 创建客户端 构建 为了创建一个新的 React 应用,我将会使用 create-react-app ——你可以用其他你想用的方法。...这里没有 mongoose , 所以需要加一些额外的属性来匹配 API 定义的数据类型。 然后,我们用相同的的接口定义 TodoProps ,组件会接受它并渲染数据。
之前在mongodb搞了个免费的512MB的mongodb数据库,刚好今天要搭建一个nodejs项目需要的数据库是mongodb,项目里的数据库连接的是本地localhost,因为是第一次接触nodejs...然后Search了好多教程大多都是本地连接,最终还是找到了,连接好以后需要用mongorestore恢复数据,又遇到了一个坑,运行mongorestore命令需要安装mongo-tools工具才可以,然后又安装了...mongo-tools,最终完美连接并导入。...Node.js连接远程mongodb代码 const mongoose = require('mongoose'); const db = mongoose.connect("mongodb+srv:/...} }) Node.js连接本地mongodb代码 const mongoose = require('mongoose'); const db = mongoose.connect("mongodb:
ctx.request.body get请求,ajax传入参数 获取的时候为ctx.request.query.参数名 koa-csrf 可以设置什么请求的时候除外,这样除外的请求就不要求必须传csrf 了 koa mongoose...始终报错FormModel is not defined 但是明明定义了,这时候就要看大小写了,当创建一个model实例的时候,往往会起和model实例一样的名称,这时一定要区分大小写,或者干脆起一个别的名称...Model.findById(id, function (err, doc){} id是字符串或者ObjectId格式的 mongoose 批量删除记录: Movie.remove({ _id: {...$in: ['aID', 'bID'] } }); 多条件查询同理: Movie.find({ _id: { $in: ['aID', 'bID'] } }); 行内事件写方法名必须加引号 ctx.type...其实就是值存的这个session叫什么名, ctx.cookies.get() and ctx.cookies.set() 设置和获取其他cookie 浏览器cookie存储有字节限制,所以可以通过redis、mongo
的环境变量,以管理员身份打开cmd,通过mongo命令启动mongodb) 会看到数据库widgets文档中也加入了我们想要的两条数据, 如果批量处理文档数据,我们需要尽可能的设置keepGoing为true...这些选项值我们同样可以在mongo下使用,进行数据的一些操作 1、接下来我们来用find()查询并返回我们数据库的内容,可以直接使用toArray()方法将结果转化为数组 2、使用可选值field来进行筛选...但是需要注意的一点是,我们设置为1,也并不是只出现type字段,系统生成的唯一标识符也就是_id总是会出现在查询结果中 更新、删除文档 修改、删除文档的方法:更新文档:update() 或者是upserts...虽然原始驱动提供了数据库的连接,但是缺少更高级别的抽象,有些繁琐,所以有时候你需要使用类似mongoose的ODM, mongoose构建在mongodb之上,提供了Schema、Model和Document...下一次我会总结一下使用express + mongoose建立数据库的连接
领取专属 10元无门槛券
手把手带您无忧上云