MongoDB插入数据的多种方法(附带实例)
要将数据插入 MongoDB 集合中,可以使用 insert() 方法。对于插入单条和多条数据, MongoDB 提供了更可靠的 insertOne() 方法和 insertMany() 方法。
MongoDB 向集合中插入记录时,无须事先对数据存储结构进行定义。如果待插入的集合不存在,则插入操作会默认创建集合。在 MongoDB 中,插入操作以单个集合为目标,MongoDB 中的所有写入操作都是单个文档级别的原子操作。
向集合中插入数据的语法如下:
插入不指定 _id 字段的文档的代码如下:
在插入期间,mongod 实例将创建 _id 字段并为其分配唯一的 ObjectId 值。这里的 mongod 是一个 MongoDB 服务器的实例,也就是 MongoDB 服务驻扎在计算机上的进程。查看集合文档的代码如下:
插入指定 _id 字段的文档的代码如下。这里的 _id 值必须在集合中是唯一的,以避免重复键错误。
插入的多个文档无须具有相同的字段,例如,下面代码中的第一个文档包含一个 _id 字段和一个 type 字段,第二个和第三个文档不包含 _id 字段。由此可知,在插入过程中, MongoDB 将会为第二个和第三个文档创建默认 _id 字段。
下面进行查询和验证,代码如下。可以看到,在 _id 字段插入时,系统自动为第二个和第三个文档创建了字段。
用变量方式插入文档的代码如下:
有序地插入多条文档的代码如下:
MongoDB 新增文档可以指定插入单条还是多条,插入代码如下:
使用 insertOne() 命令插入一条文档的代码如下:
使用 insertMany() 命令插入多条文档的代码如下:
MongoDB 向集合中插入记录时,无须事先对数据存储结构进行定义。如果待插入的集合不存在,则插入操作会默认创建集合。在 MongoDB 中,插入操作以单个集合为目标,MongoDB 中的所有写入操作都是单个文档级别的原子操作。
向集合中插入数据的语法如下:
db.collection.insert( <document or array of documents>, { writeConcern: <document>, // 可选字段 ordered: <boolean> // 可选字段 } )上述代码中各参数的含义如下:
- db 表示数据库名;
- collection 表示集合名;
- insert 为插入文档命令,这三者之间用“.”连接。
- <document or array of documents> 参数表示可设置插入单个或多个文档。
- writeConcern∶<document> 参数表示自定义写出错的级别,这是一种出错捕捉机制。
- ordered∶<boolean> 默认值为 true,表示在数组中执行文档的有序插入,并且如果其中一个文档发生错误,MongoDB 将返回而不处理数组中的其余文档;如果值为 false,则执行无序插入,若其中一个文档发生错误,MongoDB 会忽略错误,继续处理数组中的其余文档。
插入不指定 _id 字段的文档的代码如下:
> db.test.insert({ item: "card", qty: 15 })
在插入期间,mongod 实例将创建 _id 字段并为其分配唯一的 ObjectId 值。这里的 mongod 是一个 MongoDB 服务器的实例,也就是 MongoDB 服务驻扎在计算机上的进程。查看集合文档的代码如下:
> db.test.find() {"_id": ObjectId("5bacac84bb5e8c5dff78dc21"), "item": "card", "qty": 15}这些 ObjectId 值与执行操作时的机器和时间有关,因此,读者执行这段命令后得到的返回值与上述代码中的值是不同的。
插入指定 _id 字段的文档的代码如下。这里的 _id 值必须在集合中是唯一的,以避免重复键错误。
> db.test.insert( {_id: 10, item: "box", qty: 20} ) > db.test.find() {"_id": 10, "item": "box", "qty": 20}可以看到,新插入文档的 id 值为指定的 id 值。
插入的多个文档无须具有相同的字段,例如,下面代码中的第一个文档包含一个 _id 字段和一个 type 字段,第二个和第三个文档不包含 _id 字段。由此可知,在插入过程中, MongoDB 将会为第二个和第三个文档创建默认 _id 字段。
db.test.insert( [ {_id: 11, item: "pencil", qty: 50, type: "no.2"}, {item: "pen", qty: 20}, {item: "eraser", qty: 25} ] )
下面进行查询和验证,代码如下。可以看到,在 _id 字段插入时,系统自动为第二个和第三个文档创建了字段。
> db.test.find() {"_id": 11, "item": "pencil", "qty": 50, "type": "no.2"} {"_id": ObjectId("5bacf31728b746e917e06b27"), "item": "pen", "qty": 20} {"_id": ObjectId("5bacf31728b746e917e06b28"), "item": "eraser", "qty": 25}
用变量方式插入文档的代码如下:
> document=({name:"c语言",price:40}) // document为变量名 > db.test.insert(document)
有序地插入多条文档的代码如下:
> db.test.insert([ {_id:10, item:"pen", price:"20"}, {_id:12, item:"redpen", price:"30"}, {_id:11, item:"bluepen", price:"40"} ], {ordered: true} )当设置了 ordered∶true 时,插入的数据是有序的。如果存在某条待插入文档和集合中已存在文档 _id 相同的情况,那么 _id 相同的文档与后续文档都将不再进行插入。当设置了 ordered∶false 时,除了出错记录(包括 _id 重复)外,其他的文档继续进行插入。
MongoDB 新增文档可以指定插入单条还是多条,插入代码如下:
db.collection.insertOne() // 插入单个文档 db.collection.insertMany() // 插入多条文档
使用 insertOne() 命令插入一条文档的代码如下:
db.test.insertOne( { item: "card", qty: 15 } )
使用 insertMany() 命令插入多条文档的代码如下:
db.test.insertMany( [ {item: "card", qty: 15}, {item: "envelope", qty: 20}, {item: "stamps", qty: 30} ] );