本文为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数据模型设计系列