MongoDB是一种NoSQL的文档型数据库,其存储的文档类型都是JSON对象。

在node.js中由于代码都是异步执行,且nosql也没有“事物”这一定义,所以日常使用中很难保证数据库操作的原子性。就是说,假设客户端连续两次发起同一事件将数据存入数据库,很可能会导致数据被“重复”保存(但实际上,MongoDB的“默认”不会创建重复数据,因为其“唯一键”_id是不会重复的)。一般的立马能想到的方法是在操作前进行检验,但是增加了多余的IO操作不说,对于批量数据库操作的时候力有不逮,且在高并发的情况下,仍然会有数据重复的风险,因为在异步执行中,我们无法保证哪个线程先执行哪个线程后执行。一个比较好的方法是给除去_id外的其他字段加上唯一索引。加上唯一索引后,就保证了这些字段不会重复,他会在插入重复错误的时候扔出一个错误。

所以在mongoose中可以使用insertMany来执行批量插入,然后通过设置{ ordered:false }在吞掉错误,在mongoose的官方文档里,ordered为true意味着会在遇到第一个错误时会立刻抛出失败终止操作,为false时将在执行过程中忽略错误,待到所有操作完成之后再抛出错误,可以在错误中再查找哪些是因为重复而造成的错误。

怎么说呢,orm既有它的好处也有坏处,对于编码,维护,防止注入等方面的好处明显,但是对于性能,内存的消耗,以及连表查询等复杂条件时的复杂有时也让人头疼。尽量分清楚场合,如写操作远多于读操作的时候。但是对于实际开发情况来说,除开关键部位,其余地方还是能用orm就尽量用,因为很多时候,性能不是最重要的,代码易于维护才是。

MongoDB及Mongoose的记录的更多相关文章

  1. Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。

    Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...

  2. MongoDB 和 Mongoose 04

    一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...

  3. 【重学Node.js 第3篇】mongodb以及mongoose的使用

    mongodb以及mongoose的使用 本篇为这个系列的第三篇,想看更多可以直接去github的项目:https://github.com/hellozhangran/happy-egg-serve ...

  4. 前端知识点回顾——mongodb和mongoose模块

    mongodb和mongoose模块 数据库 数据库有关系型数据库(MySQL)和非关系型数据库(mongodb),两者的语法和数据存储形式不一样. mySQL 关系型数据库 类似于表格的形式,每一条 ...

  5. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  6. mongodb用mongoose取到的对象不能增加属性

    先定义了一个article的schema var mongoose = require('mongoose'); var Schema = mongoose.Schema; exports.schem ...

  7. 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  8. [转] mongoDB与mongoose

    mongoDB简介 mongoDB与一些关系型数据库相比,它更显得轻巧.灵活,非常适合在数据规模很大.事务性不强的场合下使用.同时它也是一个对象数据库,没有表.行等概念,也没有固定的模式和结构,所有的 ...

  9. Mongodb 与 Mongoose 的使用

    目标 无明确目标 知识点 了解 mongodb (http://www.mongodb.org/ ) 学习 mongoose 的使用 (http://mongoosejs.com/ ) 课程内容 mo ...

随机推荐

  1. c# datatable 分组

    DataTable dt = new DataTable(); IEnumerable<IGrouping<, ));//按行政区代码前两位分组

  2. Android 开发 获取设备信息与App信息

    设备信息 设备ID(DeviceId) 获取办法 android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager ...

  3. Mssql合并查询结果

    在项目开发中,有时会碰到将列记录合并为一行的情况,例如根据地区将人员姓名合并,或根据拼音首字母合并城市等,下面就以根据地区将人员姓名合并为例,详细讲一下合并的方法. 首先,先建一个表,并添加一些数据, ...

  4. Jmeter之数据库性能测试

    公司的**产品急待上线,但查询订单操作响应很慢,为了准确定位问题,特对几个大数据查询语句进行性能测试. 环境介绍:数据库用的MYSQL,采用分布式布置,本次单压测一台数据库服务器,查询待支付订单.待消 ...

  5. django之关联field 描述子

    """Accessors for related objects. When a field defines a relation between two models, ...

  6. [SF] Symfony 标准 HttpFoundation\Request 实现分析

    使用方式 /** * 如果直接示例化 Request 默认是没有参数的,可以自己传入 * 本方法将 PHP 超全局变量作为参数然后实例化自身(Request)进行初始化. */ $request = ...

  7. [Docker] 使用 Dockerfile 的多级构建 (multi-stage builds)

      Multi-stage build 即在一个 Dockerfile 中使用多个 FROM 指令.   每个 FROM 指令可以使用不同的基础镜像,并且每一个都开启新的构建阶段.   你可以有选择地 ...

  8. Redis物理文件结构

    Redis物理文件结构  对于数据库,个人习惯先从物理结构文件入手,整体上看一下有哪些文件,都是什么作用.类似于MySQL,数据文件和配置文件是Redis最基本也是做主要的两个物理文件之一,相比MyS ...

  9. CPU TFLOPS 计算

    CPU TFLOPS 计算 姚伟峰 yaoweifeng0301@126.com] http://www.cnblogs.com/Matrix_Yao/ 深度学习任务是一个计算密集型任务,所以很关注计 ...

  10. jenkins grunt 自动构建流程

    1. grunt生成的压缩文件不建议上传到svn,src里的源码和grunt,npm的配置文件保存在svn里就够了2. grunt有watch任务,src里的文件改变了可以自动执行任务,比如压缩,3. ...