OPTIONS
翻译或纠错本页面

插入文档

在MongoDB中,我们使用 db.collection.insert() 方法向集合里面添加新文档。

插入一个文档

1

插入一个文档到集合中。

以下示例向名为 inventory 的集合中插入一个文档。若该集合不存在,此方法将创建该集合。

db.inventory.insert(
   {
     item: "ABC1",
     details: {
        model: "14Q3",
        manufacturer: "XYZ Company"
     },
     stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ],
     category: "clothing"
   }
)

此操作返回一个带有操作状态的 WriteResult 对象。文档插入成功将返回如下对象:

WriteResult({ "nInserted" : 1 })

nInserted 字段指定了插入文档的个数。如果操作过程中遭遇错误,WriteResult 对象将包含错误信息。

2

查看插入的文档。

如果插入操作成功,通过查询该集合验证插入结果。

db.inventory.find()

将返回你插入的文档。

{ "_id" : ObjectId("53d98f133bb604791249ca99"), "item" : "ABC1", "details" : { "model" : "14Q3", "manufacturer" : "XYZ Company" }, "stock" : [ { "size" : "S", "qty" : 25 }, { "size" : "M", "qty" : 50 } ], "category" : "clothing" }

在返回文档中可以看到,MongoDB 向文档中添加了一个 _id 字段。如果客户端插入文档不包含 _id 字段,MongoDB服务器将自动添加该字段并设置其值为 ObjectId 。你的文档中的 ObjectId 值会和以上显示的不同。

插入文档数组

你可以通过传递文档数组到方法 db.collection.insert() 的方式插入多个文档。

1

创建文档数组。

定义变量 mydocuments 用于保存待插入的文档数组。

var mydocuments =
    [
      {
        item: "ABC2",
        details: { model: "14Q3", manufacturer: "M1 Corporation" },
        stock: [ { size: "M", qty: 50 } ],
        category: "clothing"
      },
      {
        item: "MNO2",
        details: { model: "14Q3", manufacturer: "ABC Company" },
        stock: [ { size: "S", qty: 5 }, { size: "M", qty: 5 }, { size: "L", qty: 1 } ],
        category: "clothing"
      },
      {
        item: "IJK2",
        details: { model: "14Q2", manufacturer: "M5 Corporation" },
        stock: [ { size: "S", qty: 5 }, { size: "L", qty: 1 } ],
        category: "houseware"
      }
    ];
2

插入所有文档。

传递数组 mydocuments 到方法 db.collection.insert() 执行批量插入。

db.inventory.insert( mydocuments );

该方法返回包含操作状态的 BulkWriteResult 对象。若插入成功将返回如下对象:

BulkWriteResult({
   "writeErrors" : [ ],
   "writeConcernErrors" : [ ],
   "nInserted" : 3,
   "nUpserted" : 0,
   "nMatched" : 0,
   "nModified" : 0,
   "nRemoved" : 0,
   "upserted" : [ ]
})

nInserted 字段表示已插入文档数。如果操作中遇到错误,BulkWriteResult 对象将包含错误的有关信息。

每个插入的文档都将包含MongoDB自动添加的 _id 字段。

Bulk 插入多个文档

2.6 新版功能.

MongoDB提供一个用于执行批量写入的 Bulk() API。以下操作步骤描述了如何使用 Bulk() API向MongoDB集合中插入一组文档。

1

初始化一个操作构建器 Bulk

给集合 inventory 初始化一个操作构建器 Bulk

var bulk = db.inventory.initializeUnorderedBulkOp();

该操作返回一个无序的操作构建器,维护了所有待执行的操作列表。无序操作意味着MongoDB能够以平行方式执行,也可以用非确定性顺序的方式执行列表中的操作。如果当执行其中一个写操作时出现错误,MongoDB将继续执行列表中其他剩余的写操作。

你也可初始化一个有序的操作构建器;详见 db.collection.initializeOrderedBulkOp()

2

bulk 对象中添加插入操作。

使用 Bulk.insert() 方法向 bulk 对象中添加两个插入操作。

bulk.insert(
   {
     item: "BE10",
     details: { model: "14Q2", manufacturer: "XYZ Company" },
     stock: [ { size: "L", qty: 5 } ],
     category: "clothing"
   }
);
bulk.insert(
   {
     item: "ZYT1",
     details: { model: "14Q1", manufacturer: "ABC Company"  },
     stock: [ { size: "S", qty: 5 }, { size: "M", qty: 5 } ],
     category: "houseware"
   }
);
3

执行批量操作。

调用 bulk 对象的 execute() 方法以执行 bulk 对象列表中的所有操作。

bulk.execute();

该方法返回包含操作状态的 BulkWriteResult 对象。若插入成功将返回如下对象:

BulkWriteResult({
   "writeErrors" : [ ],
   "writeConcernErrors" : [ ],
   "nInserted" : 2,
   "nUpserted" : 0,
   "nMatched" : 0,
   "nModified" : 0,
   "nRemoved" : 0,
   "upserted" : [ ]
})

nInserted 字段表示已插入文档数。如果操作中遇到错误,BulkWriteResult 对象将包含错误的有关信息。

更多的示例和方法

更多的示例请见 db.collection.insert()

使用 db.collection.update() 方法、 db.collection.findAndModify(),以及 db.collection.save() 方法也能新增文档。可分别查看他们的页面获取更多的信息和示例。