MongoDB批量写入顺序

515 阅读1分钟

使用insertMany时,默认按照参数顺序插入,语法为:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

那么,有序和无序存在哪些区别呢?主要有以下两个方面:

1. 无序性能更高

无序(ordered: false)时,MongoDB可以重新排列插入的顺序,以提高性能。

2. 错误处理不同

有序时,插入文档出现错误后,这条数据以后的文档均不会被插入到集合中。无序时,MongoDB将尝试插入所有文档。

比如在下例中,第三个文档将不能被插入,因为_id重复

db.movies.insertMany([
    {_id:1, title:'g'},
    {_id:2, title:'f'},
    {_id:2, title:'a'},
    {_id:3, title:'c'},
]);

执行结果为

[  {    "_id": 1,    "title": "g"  },  {    "_id": 2,    "title": "f"  }]

清除数据,重新执行无序插入

db.movies.drop();

db.movies.insertMany([
    {_id:1, title:'g'},
    {_id:2, title:'f'},
    {_id:2, title:'a'},
    {_id:3, title:'c'},
], { ordered: false });

执行结果为

[  {    "_id": 1,    "title": "g"  },  {    "_id": 2,    "title": "f"  },  {    "_id": 3,    "title": "c"  }]