CURD中的C,表示创建或者插入,在MongoDB的特性中,并不需要显示地先创建一个collection,因为MongoDB不对表结构有固定的要求,如果一个表尚未存在,那么在插入第一条document时,该表即被创建。
一、语法
插入文档有两种方式:
1.插入单条文档
db.collection.insertOne()
如:
db.sam.insertOne({name:“Sam”,age:25})
返回:
{
"acknowledged" : true,
"insertedId" : ObjectId("56fc40f9d735c28df206d078")
}
又或者指定_id插入一条文档:
db.sam.insertOne({_id:1,name:“Tom”,age:25})
返回:
{ "acknowledged" : true, "insertedId" : 1 }
2.插入多条文档
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
以上命令插入三条文档,每个文档用{}括起来,文档之间以逗号分隔,多个文档整体用[]括起来。
3.通用的插入命令
db.sam.insert(),既可以插入单条文档也可以插入多条文档,如
db.sam.insert({name:“Sam”,age:25})
db.sam.insert([{name:“Sam”,age:25},{name:“Tom”,age:25}])
无论是插入单条还是多条文档,都可以指定writeconcern属性,如
db.sam.insertOne({name:"Sam",age:25},{w: "majority", wtimeout: 100})
db.sam.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
],
{w: "majority", wtimeout: 100})
二、特性
1.自动创建
如果插入操作前colletion不存在,则自动创建。
2._id列
每个文档都包含一个_id主键,可以显示指定,不指定时系统自动生成。
3.原子性
insertOne()保证每一条文档插入的原子性。
insertMany()保证每一条文档各自的原子性,但是并不保证整体的原子性。意思是每插入一条文档,都具备原子性,但是并不保证多条文档的整体插入操作是原子的。
4.writeconcern
插入操作可以自定义指定writeconcern属性。