MongoDB插入文檔

在本章中,我們將學習如何在MongoDB集合中插入文檔。

insert()方法

要將數據插入到 MongoDB 集合中,需要使用 MongoDB 的 insert()save()方法。

語法

insert()命令的基本語法如下:

>db.COLLECTION_NAME.insert(document)

示例

>db.mycol.insert({
   _id: 100,
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'yiibai tutorials',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100,
})

這裏mycol是集合的名稱,在前一章中所創建的。如果數據庫中不存在集合,則MongoDB將創建此集合,然後將文檔插入到該集合中。

在插入的文檔中,如果不指定_id參數,那麼 MongoDB 會爲此文檔分配一個唯一的ObjectId。

_id爲集合中的每個文檔唯一的12個字節的十六進制數。 12字節劃分如下 -

_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 
   3 bytes incrementer)

要在單個查詢中插入多個文檔,可以在insert()命令中傳遞文檔數組。如下所示 -

> db.mycol.insert([
   {
      _id: 101,
      title: 'MongoDB Guide', 
      description: 'MongoDB is no sql database',
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 100
   },

   {
      _id: 102,
      title: 'NoSQL Database', 
      description: "NoSQL database doesn't have tables",
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 210, 
      comments: [
         {
            user:'user1',
            message: 'My first comment',
            dateCreated: new Date(2017,11,10,2,35),
            like: 0 
         }
      ]
   },
   {
      _id: 104,
      title: 'Python Quick Guide', 
      description: "Python Quick start ",
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['Python', 'database', 'NoSQL'],
      likes: 30, 
      comments: [
         {
            user:'user1',
            message: 'My first comment',
            dateCreated: new Date(2018,11,10,2,35),
            like: 590 
         }
      ]
   }
])

要插入文檔,也可以使用db.post.save(document)。 如果不在文檔中指定_id,那麼save()方法將與insert()方法一樣自動分配ID的值。如果指定_id,則將以save()方法的形式替換包含_id的文檔的全部數據。

其它插入文檔的方法

db.collection.insertOne()方法

db.collection.insertOne()方法將單個文檔插入到集合中。以下示例將新文檔插入到庫存集合中。 如果文檔沒有指定_id字段,MongoDB會自動將_id字段與ObjectId值添加到新文檔。

db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

db.collection.insertOne()方法返回包含新插入的文檔的`_id```字段值的文檔。

執行結果如下 -

> db.inventory.insertOne(
...    { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
... )
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5955220846be576f199feb55")
}
>

db.collection.insertMany()方法

db.collection.insertMany()方法將多個文檔插入到集合中,可將一系列文檔傳遞給db.collection.insertMany()方法。以下示例將三個新文檔插入到庫存集合中。如果文檔沒有指定_id字段,MongoDB會向每個文檔添加一個ObjectId值的_id字段。

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" } }
])

insertMany()返回包含新插入的文檔_id字段值的文檔。執行結果如下 -

> 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" } }
... ])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("59552c1c46be576f199feb56"),
                ObjectId("59552c1c46be576f199feb57"),
                ObjectId("59552c1c46be576f199feb58")
        ]
}
>