MongoDB是一种NoSQL的文档型数据库,其存储的文档类型都是JSON对象。node
在node.js中因为代码都是异步执行,且nosql也没有“事物”这必定义,因此平常使用中很难保证数据库操做的原子性。就是说,假设客户端连续两次发起同一事件将数据存入数据库,极可能会致使数据被“重复”保存(但实际上,MongoDB的“默认”不会建立重复数据,由于其“惟一键”_id是不会重复的)。通常的立马能想到的方法是在操做前进行检验,可是增长了多余的IO操做不说,对于批量数据库操做的时候力有不逮,且在高并发的状况下,仍然会有数据重复的风险,由于在异步执行中,咱们没法保证哪一个线程先执行哪一个线程后执行。一个比较好的方法是给除去_id外的其余字段加上惟一索引。加上惟一索引后,就保证了这些字段不会重复,他会在插入重复错误的时候扔出一个错误。sql
因此在mongoose中可使用insertMany来执行批量插入,而后经过设置{ ordered:false }在吞掉错误,在mongoose的官方文档里,ordered为true意味着会在遇到第一个错误时会马上抛出失败终止操做,为false时将在执行过程当中忽略错误,待到全部操做完成以后再抛出错误,能够在错误中再查找哪些是由于重复而形成的错误。数据库
怎么说呢,orm既有它的好处也有坏处,对于编码,维护,防止注入等方面的好处明显,可是对于性能,内存的消耗,以及连表查询等复杂条件时的复杂有时也让人头疼。尽可能分清楚场合,如写操做远多于读操做的时候。可是对于实际开发状况来讲,除开关键部位,其他地方仍是能用orm就尽可能用,由于不少时候,性能不是最重要的,代码易于维护才是。并发