电子商务网站的建设流程/建站推广网站
MongoDB原子操作
mongodb不支持事务,所以在需要特别事务的项目中不建议使用mongo数据库。mongodb无法保证数据的完整性。但是mongodb支持许多的原子操作例如ducoment的save、update、delete等操作。
数据模型
在博客上看到一个能很好体现findAndModify操作原子性的数据模型Product,如下:
{"_id":1,"product_name": "Samsung S3","category": "mobiles","product_total": 5,"product_available": 3,"product_bought_by": [{"customer": "john","date": "7-Jan-2014"},{"customer": "mark","date": "8-Jan-2014"}]
}
现在我们要对该商品进行购买,首先
- 应该先根据他的主键查询到该商品
- 然后判断可购买数量是否大于0
- 如果该document满足,对可购买数量进行-1操作,然后将用户购买记录插入product_bought_by这个数据中。
sql:
db.products.findAndModify({query:{_id:2, product_available:{$gt:0}},update:{$inc:{product_available:-1},$push:{product_bought_by:{customer:"tomsee",date:"2019-11-11 10:19:32"}}}
})
其他原子操作常见命令
$set: 指定一个建并更新键值,若建不存在则创建
{ $set : { field : value } }
$unset: 用来删除一个键
{ $unset : { field : 1} }
$inc: 对文档中某个值为数字类型的键进行增减操作
{$inc : { field : value } }
$push: 添加value到一个以field中,field必须是数组类型,如果field不存在则新增一个数组类型加进去。
{ $push : { field : value } }
$pushAll: 将多个值添加到数组中,同push
{ $pushAll : { field : value_array } }
$pull: 从数组field中删除一个value
{ $pull : { field : _value } }
$pop : 删除数组的第一个或最后一个元素
{ $pop : { field : 1 } }
$rename: 修改字段名称
{ $rename : { old_field_name : new_field_name } }
$bit: 位操作,integer类型
{$bit : { field : {and : 5}}}