文档菜单
文档首页
/
MongoDB 手册
/ / /

为原子操作建模数据

本页内容

  • 模式

尽管 MongoDB 支持复制品集和分片集群的多文档事务,但对于许多场景,正如本页所讨论的,非规范化数据模型将继续是您数据和用例的最佳选择。

在 MongoDB 中,对单个文档的写操作是原子的。对于必须一起更新的字段,将字段嵌入同一文档中确保字段可以原子更新。

例如,考虑一种需要维护书籍信息的情况,包括可借阅的副本数量以及当前的借阅信息。

书籍的可借阅副本和借阅信息应保持同步。因此,在同一个文档中嵌入available 字段和 checkout 字段确保您可以原子更新这两个字段。

{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}

然后要更新新的借阅信息,您可以使用 db.collection.updateOne() 方法原子更新 available 字段和 checkout 字段

db.books.updateOne (
{ _id: 123456789, available: { $gt: 0 } },
{
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
)

操作返回一个包含操作状态的文档信息

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

matchedCount 字段显示匹配更新条件的文档有 1 个,而 modifiedCount 显示操作更新了 1 个文档。

如果没有文档匹配更新条件,则 matchedCountmodifiedCount 将会是 0,这表示您无法借阅书籍。

返回

特定应用场景

本页内容