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. springCloud 服务注册启动报错<com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect>

    报错:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: ...

  2. RNN探索(2)之手写数字识别

    这篇博文不介绍基础的RNN理论知识,只是初步探索如何使用Tensorflow,之后会用笔推导RNN的公式和理论,现在时间紧迫所以先使用为主~~ import numpy as np import te ...

  3. wechat-plus 使用node开发微信公众号

    github:https://github.com/liuyinglong/node-wechatnpm:https://www.npmjs.com/package/wechat-plus insta ...

  4. java-设计模式-索引

    设计模式的七大原则 设计模式遵循的七大原则 微信红包的设计实践 单例模式 常见的几种单例模式写法 单例模式的应用场景及优缺点 面向对象六大设计原则 JAVA设计模式之观察者模式 JAVA设计模式之策略 ...

  5. 【转】配置Exchange 2010 服务器(二)Exchange2010证书配置

    原文链接:http://blog.51cto.com/shubao/788562 (一)架设证书服务器 (二)Exchange2010申请证书 (三)证书服务器导入Exchange服务器受信任根证书 ...

  6. Spring整合quart初识

    Spring集成quart有两种方式,一种是实现Job接口,一种是继承QuartzJobBean 刚开始报错:持久化时未序列化异常 <bean id="simpleJobDetail& ...

  7. java中对list进行分页显示数据到页面

    http://blog.csdn.net/Tang_Mr/article/details/76212184#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2 ...

  8. MAC环境配置

    必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. 1.安装homebrew(用brew指令安装其他依赖) /usr/bin/ruby -e &q ...

  9. python中网络编程之线程

    网络编程之线程 什么是线程? 程序的执行线路.每个进程默认有一条线程.线程包含了程序的具体步骤. 多线程就是一个进程中有除主线程(默认线程)外还有多个线程. 线程与进程的关系(进程包含线程,而线程依赖 ...

  10. groovy 知识集锦

    对应官方的<Program structure>的中文翻译 http://www.cnblogs.com/zhaoxia0815/p/7404387.html