参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.save()
db.collection.
save
()¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
根据其参数更新现有文档或插入新文档document
。
注意
MongoDB弃用该db.collection.save()
方法。而是使用db.collection.insertOne()
或
db.collection.replaceOne()
代替。
该save()
方法具有以下形式:
参数 | 类型 | 描述 |
---|---|---|
document |
文献 | 要保存到集合的文档。 |
writeConcern |
文献 | 可选的。表达书面关切的文件。省略使用默认的写关注。请参阅写关注点。 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
该save()
返回包含操作的状态的对象。
返回值: | 一写结果包含操作的状态对象。 |
---|
如果文档不不包含_id字段,那么
save()
方法调用的
insert()
方法。在操作过程中,
mongo
shell将创建一个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以获得更新信息。