你可以使用 db.collection.findAndModify() 方法来判断书籍是否可结算并更新新的结算信息。
在同一个文档中嵌入的 available 和 checkout 字段来确保这些字段是同步更新的:
db.books.findAndModify ( { query: { _id: 123456789, available: { $gt: 0 } }, update: { $inc: { available: -1 }, $push: { checkout: { by: "abc", date: new Date() } } }} )原子操作常用命令$set
用来指定一个键并更新键值,若键不存在并创建。
{ $set : { field : value } }$unset
用来删除一个键。
{ $unset : { field : 1} }$inc
$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
{ $inc : { field : value } }$push
用法:
{ $push : { field : value } }
把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。
$pushAll同$push,只是一次可以追加多个值到一个数组字段内。
{ $pushAll : { field : value_array } }$pull
从数组field内删除一个等于value值。
{ $pull : { field : _value } }$addToSet
增加一个值到数组内,而且只有当这个值不在数组内才增加。
$pop删除数组的第一个或最后一个元素
{ $pop : { field : 1 } }$rename
修改字段名称
{ $rename : { old_field_name : new_field_name } }$bit
位操作,integer类型
{$bit : { field : {and : 5}}}偏移操作符
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] } > t.update( {‘comments.by‘:‘joe‘}, {$inc:{‘comments.$.votes‘:1}}, false, true ) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }
MongoDB 原子操作
标签:
小编还为您整理了以下内容,可能对您也有帮助:
原子文档存在哪
保存到Mongodb。
原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
原子是化学反应不可再分的最小微粒。一个正原子包含有一个致密的原子核及若干围绕在原子核周围带负电的电子。而负原子的原子核带负电,周围的负电子带正电。正原子的原子核由带正电的质子和电中性的中子组成。负原子原子核中的反质子带负电,从而使负原子的原子核带负电。当质子数与电子数相同时,这个原子就是电中性的;否则,就是带有正电荷或者负电荷的离子。根据质子和中子数量的不同,原子的类型也不同:质子数决定了该原子属于哪一种元素,而中子数则确定了该原子是此元素的哪一个同位素。原子构成分子而分子组成物质中同种电荷相互排斥,不同种电荷相互吸引。
原子文档存在哪
保存到Mongodb。
原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
原子是化学反应不可再分的最小微粒。一个正原子包含有一个致密的原子核及若干围绕在原子核周围带负电的电子。而负原子的原子核带负电,周围的负电子带正电。正原子的原子核由带正电的质子和电中性的中子组成。负原子原子核中的反质子带负电,从而使负原子的原子核带负电。当质子数与电子数相同时,这个原子就是电中性的;否则,就是带有正电荷或者负电荷的离子。根据质子和中子数量的不同,原子的类型也不同:质子数决定了该原子属于哪一种元素,而中子数则确定了该原子是此元素的哪一个同位素。原子构成分子而分子组成物质中同种电荷相互排斥,不同种电荷相互吸引。
mongodb的数据模块与传统的数据库模型有什么区别
mogodb是非关系型(NoSQL)数据库,它文档型数据库。
我用过mongodb做了个小项目练习,我简单说说(因为我也了解不深)它与传统数据库的区别吧:
最基本的区别就是数据模型的区别:
传统数据库 从大到小为数据库,表,行。而mongodb是:数据库,集合,文档,BSON(类似json的二进制数据)。
传统数据库需要预定义表结构(一经定义,不能改变),而mongodb不需要,而且文档结构可变化(比如说用来相关的文档是放在同一个集合的,但同一个集合的文档不一定结构都是相同的)
应该还有,想不起来了。
数据模型不同,对应的查询方式也不同。传统的数据库查询方式都是sql,而mongodb的查询方式和sql完全不一样。
还有其他的,如提高可靠性的方案,原子操作的级别等等也不一样。
传统数据库的一些概念在mongodb是不存在的。
设计数据库的时候也不一样,传统数据库在设计时会进行范式化规范化,而mongodb数据库进行设计时候往往会反范式。
下面是从百度百科拿来的:
对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。