db.collection.save()

在本页面

Definition

save()方法具有以下形式:

在 2.6 版中进行了更改。

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
Parameter Type Description
document document 要保存到集合的文档。
writeConcern document 可选的。表示write concern的文档。省略使用默认的写关注。参见Write Concern


2.6 版中的新功能。

在 2.6 版中进行了更改:save()返回一个包含操作状态的对象。

Returns: 包含操作状态的WriteResult对象。

Behavior

Write Concern

在 2.6 版中进行了更改。

save()方法使用insertupdate命令,它们使用默认的write concern。要指定其他写关注点,请在 options 参数中包括写关注点。

Insert

如果文档不包含_id字段,则save()方法将调用insert()方法。在操作期间,mongoShell 程序将创建ObjectId并将其分配给_id字段。

Note

大多数 MongoDB 驱动程序 Client 端将包含_id字段并生成ObjectId,然后再将插入操作发送到 MongoDB。但是,如果 Client 端发送的文档中没有_id字段,则mongod将添加_id字段并生成ObjectId

Update

如果文档包含_id字段,则save()方法等效于将upsert option设置为true并将查询谓词放在_id字段上的更新。

Examples

保存新文档而不指定_id 字段

在以下示例中,save()方法执行插入操作,因为传递给该方法的文档不包含_id字段:

db.products.save( { item: "book", qty: 40 } )

在插入过程中,shell 将使用唯一的ObjectId值创建_id字段,该字段已由插入的文档验证:

{ "_id" : ObjectId("50691737d386d8fadbd6b01d"), "item" : "book", "qty" : 40 }

ObjectId值特定于机器和运行操作的时间。因此,您的值可能与示例中的值不同。

保存指定_id 字段的新文档

在下面的示例中,save()使用upsert:true执行更新,因为文档包含_id字段:

db.products.save( { _id: 100, item: "water", qty: 30 } )

因为_id字段的值在集合中不存在*,所以更新操作将导致文档的插入。这些操作的结果与设置为true带有 upsert 选项的 update()方法相同。

该操作将在products集合中生成以下新文档:

{ "_id" : 100, "item" : "water", "qty" : 30 }

替换现有文档

products集合包含以下文档:

{ "_id" : 100, "item" : "water", "qty" : 30 }

save()方法使用upsert:true执行更新,因为该文档包含_id字段:

db.products.save( { _id : 100, item : "juice" } )

由于_id字段包含集合中存在的值,因此该操作将执行更新以替换文档,并生成以下文档:

{ "_id" : 100, "item" : "juice" }

覆盖默认写问题

对副本集的以下操作指定"w: majority"write concernwtimeout的 5000 毫秒,以使该方法在写入传播到大多数有表决权的副本集成员之后返回,或者该方法在 5 秒钟后超时。

在版本 3.0 中进行了更改:在以前的版本中,majority引用了副本集的所有成员的大多数,而不是多数投票成员。

db.products.save(
    { item: "envelopes", qty : 100, type: "Clasp" },
    { writeConcern: { w: "majority", wtimeout: 5000 } }
)

WriteResult

在 2.6 版中进行了更改。

save()返回一个WriteResult对象,该对象包含插入或更新操作的状态。有关详细信息,请参见插入的 WriteResultWriteResult 更新

首页