修改器 $inc 增加和减少
修改器 $inc
用来增加已有键的值,或者 键不存在时 创建键。
它 用来 专门 增加(或减少)数字的。
$inc 只能用于 整数 、 长整数 或 双精度浮点数 , 修改其他类型 会失败报错,即使其他多种语言中能自动转换的类型 (如:null , 布尔 或 数字构成字符串),都是不行的。 报错字符串 如下:
Modifier "$inc" allowed for numbers only
比如我们要统计某个网站的访问量
http://www.hao123.com/ 网站 访问量目前是 52 个。
> url = { "url" : "www.hao123.com" , "pageviews" : 52 }
{ "url" : "www.hao123.com", "pageviews" : 52 }
> db.analytics.insert(url)
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 52 }
{ "url" : "www.hao123.com", "pageviews" : 52 }
> db.analytics.insert(url)
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 52 }
这时候 有一个访问来了 用 $inc 自增修改器
> db.analytics.update({"url" : "www.hao123.com"},
... {"$inc" : {"pageviews":1} } )
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 53 }
... {"$inc" : {"pageviews":1} } )
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 53 }
看到变成了 53 个,这时发现 有两个的 是自己的测试访问次数 ,想减掉 $inc 自增修改器 可以支持 负数 。
> db.analytics.update({ "url" : "www.hao123.com"},
... {"$inc":{"pageviews":-2}})
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 51 }
... {"$inc":{"pageviews":-2}})
> db.analytics.find()
{ "_id" : ObjectId("4fde916989834bfb0bd267a7"), "url" : "www.hao123.com", "pagev
iews" : 51 }
看修改好了 变成 51了。
使用修改器 注意点 :
1. "_id" 不能修改。 (整文档更新 是可以修改 "_id" 键的)
2. 其他键 包含 唯一索引键 都是可以修改的。