首页 > 编程笔记 > MySQL笔记 阅读:1

MongoDB插入数据的多种方法(附带实例)

要将数据插入 MongoDB 集合中,可以使用 insert() 方法。对于插入单条和多条数据, MongoDB 提供了更可靠的 insertOne() 方法和 insertMany() 方法。

MongoDB 向集合中插入记录时,无须事先对数据存储结构进行定义。如果待插入的集合不存在,则插入操作会默认创建集合。在 MongoDB 中,插入操作以单个集合为目标,MongoDB 中的所有写入操作都是单个文档级别的原子操作。

向集合中插入数据的语法如下:
db.collection.insert(
  <document or array of documents>,
  {
    writeConcern: <document>,    // 可选字段
    ordered: <boolean>           // 可选字段
  }
)
上述代码中各参数的含义如下:
插入不指定 _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}
] );

相关文章