目录
insertOne, inertMany, insert 的区别
一、创建集合
区分两个概念:
- mongdb中的「集合」:相当于MySQL中的表;
- mongdb中的「文档」:相当于MySQL中的一行记录;
1、use命令创建
在添加之前我们先来说说数据库的创建,上文我们提到了use命令,表示切换到某一个数据库中去,如果我们想切换到一个并不存在的数据库中去,系统就会自动的帮我们创建这个数据库。但是一个空的数据库系统并不会显示出来,往这个数据库中插入一条记录,我们就可以看到数据库存在了,如下:
2、直接插入数据创建
MongoDB以集合(collection)的形式组织数据,collection 相当于关系型数据库中的表,如果collection不存在,当你对不存在的collection进行操作时,将会自动创建一个collection。
二、插入数据
db.集合.insertOne(<JSON对象>) // 添加单个文档 db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档 db.集合.insert() // 添加单个文档
插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为_id, ObjectId() 可以快速生成的12字节id 作为主键,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性, 可以通过ObjectId("id值").getTimestamp() 获取创建时间。
如:
ObjectId("5fe0ef13ac05741b758b3ced").getTimestamp();
创建单个文档-insertOne
db.collection.insertOne( doc , { writeConcern: 安全级别 // 可选字段 } )
writeConcern 定义了本次文档创建操作的安全写级别。简单来说, 安全写级别用来判断一次数据库写入操作是否成功,安全写级别越高,丢失数据的风险就越低,然而写入操作的延迟也可能更高。
writeConcern 决定一个写操作落到多少个节点上才算成功。 writeConcern的取值包括:
- 0: 发起写操作,不关心是否成功
- 1:集群中最大数据节点数: 写操作需要被复制到指定节点数才算成功
- majority: 写操作需要被复制到大多数节点上才算成功,发起写操作的程序将阻塞到写操作到达指定的节点数为止
示例:
db.emp.insertOne( { name:"zhangsan", age:20, sex:"m" } );
创建多个文档-insertMany
db.collection.insertMany( [ {doc } , {doc }, ....], { writeConcern: doc, ordered: true/false } )
ordered: 决定是否按顺序进行写入:
- 顺序写入时,一旦遇到错误,便会退出,剩余的文档无论正确与否,都不会写入;
- 乱序写入,则只要文档可以正确写入就会正确写入,不管前面的文档是否是错误的文档;
示例:
如下:将会创建一个 inventory 集合,并且插入 5 个文档;
MongoDB以集合(collection)的形式组织数据,collection 相当于关系型数据库中的表,如果collection不存在,当你对不存在的collection进行操作时,将会自动创建一个collection。
db.inventory.insertMany([ { item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] }, { item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] }, { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] }, { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] }, { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] } ]);
上述操作返回一个包含确认指示符的文档和一个包含每个成功插入文档的_id的数组:
insertOne, inertMany, insert 的区别
insertOne,和 insertMany命令不支持 explain命令;
insert支持 explain命令;