参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.save()
db.collection.save()¶mongo 壳法
此页面记录了mongoshell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
根据其参数更新现有文档或插入新文档document。
注意
MongoDB弃用该db.collection.save()方法。而是使用db.collection.insertOne()或
db.collection.replaceOne()代替。
该save()方法具有以下形式:
| 参数 | 类型 | 描述 |
|---|---|---|
document |
文献 | 要保存到集合的文档。 |
writeConcern |
文献 | 可选的。表达书面关切的文件。省略使用默认的写关注。请参阅写关注点。 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
该save()返回包含操作的状态的对象。
| 返回值: | 一写结果包含操作的状态对象。 |
|---|
如果文档不不包含_id字段,那么
save()方法调用的
insert()方法。在操作过程中,
mongoshell将创建一个ObjectId并将其分配给该_id字段。
注意
大多数MongoDB驱动程序客户端将包括该_id字段并ObjectId在将插入操作发送到MongoDB之前生成一个;但是,如果客户发送的文档中没有_id
字段,mongod则会添加该_id字段并生成ObjectId。
db.collection.save()可以在多文档交易中使用。
如果该操作导致插入,则该集合必须已经存在。
如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
_id字段¶在以下示例中,save()由于传递给该方法的文档不包含该_id字段,因此该方法执行插入操作:
在插入过程中,外壳程序将_id使用唯一的ObjectId值来创建该字段,该值由插入的文档验证:
这些ObjectId值特定于机器和运行该操作的时间。因此,您的值可能与示例中的值不同。
_id字段的新文档¶在以下示例中,由于文档包含一个字段,因此save()执行更新:upsert:true_id
因为该_id字段拥有集合中不存在的值,所以更新操作将导致文档的插入。这些操作的结果与upsert选项设置为
的update()方法相同
true。
该操作将在products
集合中产生以下新文档:
将save()返回一个WriteResult
包含插入或更新操作的状态对象。有关详细信息,请参见WriteResult以获得插入信息,并
参见
WriteResult以获得更新信息。