MongoDB小结04 - update【$inc】】的更多相关文章

update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务器的现执行,接着执行另一个.所以,互相冲突的更新可以火速传递,并不会互相干扰,虽然这是一个拼速度的年代,但是后更新的会取得"胜利"(后发制人!) 因为使用原子的 更新修改器 进行更新操作极为高效,所以,就决定用它了! $inc 例如:你需要存储一个网站的访问次数 db.web.insert…
查找文档 筛选查找 db.collection.find(); 返回一个集合中文档的子集,子集的 范围从 0 个文档到整个集合; db.collection.findOne(); 返回筛选的一个文档; 指定返回键 设置第二参数,在第一参数筛选后的文档中只返回第二参数设置的键值:默认包含_id 也可以在第二参数中设置_id: 0去掉_id; //返回name,age,_id db.test.find({}, {name: 1, age: 1}); //去掉_id db.test.find({},…
特殊索引和集合 1. 固定集合:固定集合需要事先创建好看,而且它的大小是固定的.当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除. 2. 创建固定集合:db.createCollection("my_collection",{"capped":true,"size":10000})  创建一个大小为10000字节的固定集合 除了大小,createCollection还能指定固定集合中文档的数量:db.createCol…
现在有一种查询变得越来越流行(尤其是移动设备):找到离当前位置最近的N个场所. MongoDB专为平面坐标查询做了专门的索引,称为地理空间索引. 同样需要用ensureIndex创建,不过,参数是两个 "2d" db.map.ensureIndex({"gps":"2d"}) gps键的值必须是某种形式的一对值:一个包含两个元素的数组或者包含两个键的内嵌文档,像这样 {"gps":[0,100]} {"gps&quo…
只要满足索引的其中之一不同即可 db.blog.ensureIndex({"username":1,"blogname":1}) 作者和作品名其中之一不同即可创建复合唯一索引. explain() hint() explain()可以返回查询使用的索引情况 hint()可以强制cursor使用某索引 但是通常MongoDB 的查询优化器非常智能,会替你选择改用哪一个索引.…
MongoDB中的索引,可以看作是书的目录. 想象一下给你一本没有目录的书,然后让你去查询指定内容,我只想说,我不是电脑,我很蛋疼! 让你翻没有目录的书,就跟让电脑查询没有索引的集合一样,从头查询到尾,毫无头绪,我们称这种行为是"表扫描" 索引简介 通常我们要查询一个user的名字,我们是这样的 db.user.find({"username":"codingwhy"}) 如果我们经常需要对username进行查询,那么我们可以为它建立索引 db…
MongoDB的文档必须有一个_id键. 目的是为了确认在集合里的每个文档都能被唯一标识. ObjectId 是 _id 的默认类型. ObjectId 采用12字节的存储空间,每个字节两位16进制数字,是一个24位的字符串. 12位生成规则: [0,1,2,3] [4,5,6] [7,8] [9,10,11] 时间戳 |机器码 |PID |计数器 前四位是时间戳,可以提供秒级别的唯一性. 接下来三位是所在主机的唯一标识符,通常是机器主机名的散列值. 接下来两位是产生ObjectId的PID,确…
第一个参数 MongoDB使用find来进行查询,查询呢,就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合. find的第一个参数决定了要返回那些文档,其形式也就一个文档,说明了要执行的查询细节. 通常呢,大家看到的find查询基本都长这个样子 db.user.find({}) db.user.find({"name":"qianjiahao"}) db.user.find({"name":"qianjiahao"…
upsert是一个选项,它是update的第三个参数,并不是一个方法.它是一种特殊的更新,要是没有文档符合匹配,那么它就会根据条件和更新文档为基础,创建新的文档,如有匹配,则正常更新.咱们之前见到的所有update操作,都是建立在有文档的基础之上的.upsert非常方便,不必预制集合,同一套代码既可以创建又可以更新. 超市需要修改商品的价格,比如将苹果的价格上调0.5元,但是店主不确定自己是否有购进苹果(偶尔会犯糊涂),那么他可以这样 db.supermarket.update({"name&q…
如果要操作数组中的值,可以用值在数组中的位置当做参数来删除 db.user.update({"name":"codingwhy.com"},{"$set":{"hobby.0":"crying"}}) { "_id" : ObjectId("55082691591555a6c35dd698"), "name" : "codingwhy.c…