NoSQL数据模型设计 - 特殊应用建模 - 原子操作

本文为NoSQL数据模型设计系列的一部分。

mongodb保证对于一个文档的写操作原子性。单个文档的所有字段以及嵌入字段都会被同时修改。所以,对于需要同时修改的字段可以放在一个文档中,确保它们的操作原子性。

例如,我们需要同时维护书籍的可用数量以及最新借出信息,把它们放到一个文档中以确保它们永远保持一致。例如

{
    _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 }

完整内容请查看NoSQL数据模型设计系列

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。