MongoDB及Mongoose的记录
MongoDB是一种NoSQL的文档型数据库,其存储的文档类型都是JSON对象。
在node.js中由于代码都是异步执行,且nosql也没有“事物”这一定义,所以日常使用中很难保证数据库操作的原子性。就是说,假设客户端连续两次发起同一事件将数据存入数据库,很可能会导致数据被“重复”保存(但实际上,MongoDB的“默认”不会创建重复数据,因为其“唯一键”_id是不会重复的)。一般的立马能想到的方法是在操作前进行检验,但是增加了多余的IO操作不说,对于批量数据库操作的时候力有不逮,且在高并发的情况下,仍然会有数据重复的风险,因为在异步执行中,我们无法保证哪个线程先执行哪个线程后执行。一个比较好的方法是给除去_id外的其他字段加上唯一索引。加上唯一索引后,就保证了这些字段不会重复,他会在插入重复错误的时候扔出一个错误。
所以在mongoose中可以使用insertMany来执行批量插入,然后通过设置{ ordered:false }在吞掉错误,在mongoose的官方文档里,ordered为true意味着会在遇到第一个错误时会立刻抛出失败终止操作,为false时将在执行过程中忽略错误,待到所有操作完成之后再抛出错误,可以在错误中再查找哪些是因为重复而造成的错误。
怎么说呢,orm既有它的好处也有坏处,对于编码,维护,防止注入等方面的好处明显,但是对于性能,内存的消耗,以及连表查询等复杂条件时的复杂有时也让人头疼。尽量分清楚场合,如写操作远多于读操作的时候。但是对于实际开发情况来说,除开关键部位,其余地方还是能用orm就尽量用,因为很多时候,性能不是最重要的,代码易于维护才是。
MongoDB及Mongoose的记录的更多相关文章
- Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。
Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...
- MongoDB 和 Mongoose 04
一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...
- 【重学Node.js 第3篇】mongodb以及mongoose的使用
mongodb以及mongoose的使用 本篇为这个系列的第三篇,想看更多可以直接去github的项目:https://github.com/hellozhangran/happy-egg-serve ...
- 前端知识点回顾——mongodb和mongoose模块
mongodb和mongoose模块 数据库 数据库有关系型数据库(MySQL)和非关系型数据库(mongodb),两者的语法和数据存储形式不一样. mySQL 关系型数据库 类似于表格的形式,每一条 ...
- mongodb导出导入实例记录
mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...
- mongodb用mongoose取到的对象不能增加属性
先定义了一个article的schema var mongoose = require('mongoose'); var Schema = mongoose.Schema; exports.schem ...
- 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战
一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...
- [转] mongoDB与mongoose
mongoDB简介 mongoDB与一些关系型数据库相比,它更显得轻巧.灵活,非常适合在数据规模很大.事务性不强的场合下使用.同时它也是一个对象数据库,没有表.行等概念,也没有固定的模式和结构,所有的 ...
- Mongodb 与 Mongoose 的使用
目标 无明确目标 知识点 了解 mongodb (http://www.mongodb.org/ ) 学习 mongoose 的使用 (http://mongoosejs.com/ ) 课程内容 mo ...
随机推荐
- Winform 弹出窗体等待
显示效果: FrmWaiting.cs: public FrmWaitingBox(EventHandler<EventArgs> Method,string msg) { Initial ...
- LeetCode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 C++
Given a binary tree, return the postorder traversal of its nodes' values. Example: Input: [,,] \ / O ...
- vue每次修改刷新当前子组件
刚入门vue,发现很多坑,对很多框架兼容性不太友好,比如layui等 每次删除相关信息,更新相关信息,不会主动刷新当前页面内容,只能手动刷新 第一步,我们在跟组件理由设置一个参数,用来判断是否需要刷新 ...
- mysql 定时计划任务 wish 按照id分组定时循环启动
SELECT count(*) FROM wish_sellers_in;UPDATE wish_sellers_in SET act_status =0 WHERE id >=1 AND ...
- oracle 查看处理锁表
--查出sid,serial#select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where ...
- layui时间控件,获取页面选中的时间值。
先贴上html文档 <div class='layui-form'> <div class="layui-form-item"> <div class ...
- ECharts折线图多个折线每次只显示一条
echart 两条折线图如何默认只显示一条,另一条隐藏呢 只需要在legend后加上, selectedMode: 'single', selectedMode [ default: true ] 图 ...
- c#实现文件写入数据表/以二进制流保存到数据库,并实现下载
上传: 1.上传文件先保存到服务器 File.SaveAs(path) 2.sql(文件和sql在一个服务器上)进行保存操作: insert into File(filename,filebody ...
- 打开fiddler后无法访问网络问题
https://jingyan.baidu.com/article/f54ae2fc680be81e92b849ed.html 导入证书后,还有一步易遗漏操作: 再次运行fiddler,依次点击Too ...
- R语言-饼图
1.饼图 > browsers<-read.table("browsers.txt",header=TRUE) > browsers<-browsers[o ...