前言
此篇博文是 Mongdb 基础系列之一;主要介绍 MongoDB 的数据建模相关内容;
本文为作者的原创作品,转载需注明出处;
Model Data for Atomic Operations
有原子性要求的数据该如何进行建模?
在 MongoDB 中,任何写入操作,比如 db.collection.update(), db.collection.findAndModify(), db.collection.remove() 的原子性操作均是作用在某一个 document 之上的;如果多个字段必须在同一个事务中同时进行修改,那么必须将这些字段嵌入到一个 document 之中;比如,我们有这样一个例子,某图书可售卖的数量用 available 字段存储以及当前已经卖出的信息由 checkout 字段存储,当某本数被售卖的同时,available 和 checkout 字段值必须同时进行修改;因此,必须将这两个字段值放到同一个 document 中,当 update 操作发生时,才能确保在同一个事务当中;
1 | { |
下面,上述的图书产生了售卖交易,我们可以使用 db.collection.update() 方法在一个事务中来同时修改 available 和 checkout 信息;如下所述,
1 | db.books.update ( |
上述操作将返回一个 WriteResult() 对象,该对象中包含了上述更新操作的返回状态值;
1 | WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) |
nMatched : 1 表示有一个 document 匹配了该 update 操作的条件,nModified : 1 表示该操作更新了一个 document;如果 nMatched 和 nModified 返回为 0,表示没有任何记录被匹配和被修改;
References
https://docs.mongodb.com/manual/applications/data-models-applications/