MongoDB小结05 - update【$set & $unset】】的更多相关文章

用$set指定一个键的值,如果不存在,就创建它.这对更新模式或者增加用户定义很有帮助. db.user.insert({"name":"codingwhy.com"}) 此用户现在只有姓名信息,现在需要给他添加email db.user.update({"name":"codingwhy.com"},{"$set":{"email":"example@example.com&q…
高级查询选项 //简单查询 var cursor = db.foo.find({"foo" : "bar"}) //封装查询 var cursor = db.foo.find({"foo" : "bar"}).sort({"x" : 1}) 实际情况不是将{"foo" : "bar"}作为查询直接发送给数据库,而是先将查询封 装在一个更大的文档中;shell会把查询从…
现在有一种查询变得越来越流行(尤其是移动设备):找到离当前位置最近的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…
连接MongoDB(bin目录下) ./mongo 如果觉得shell里空空的可以输入help,在刷屏的同时大致了解下有哪些方法 help 现在咱们还没有数据库,咱们创建一个,任性起名:template use template 咱们确认下,数据库有没有创建成功 show dbs template 0.078GB 如果存在template,就进入,如果没有,在最后保存的时候就会创建template insert 发现已经创建成功,继续走,现在咱们创建一个集合,任性起名:room,再插入点数据 d…
下载MongoDB 第一步:登上MongoDB官网,找到自己的适合的版本下载 第二步:解压(免安装),改名mongodb(举例命名,可以任个人喜好),放在你喜欢的位置(任喜好) 第三步:通过命令行: cd mongodb(进入mongodb目录) cd bin(进入bin目录) ./mongod(运行启动命令) 如果看到有错误莫担心,咱慢慢往下读 常见疑难杂症 你错误的情况可能是 mongodb默认的数据目录为/data/db,如果这个目录不存在或者不可写,服务器会启动失败 解决方案:mkdir…
我们为什么要去学习MongoDB MongoDB是一种强大.灵活.可扩展的数据存储方式. 丰富的数据模型 MongoDB是面向文档的数据库,不是关系型数据库.它将原来'行'(row)的概念换成了更加灵活的'文档'(document)模型.面向文档的方式可以将文档和数组内嵌进来,所以用一条记录就可以表示很复杂的层次关系. MongoDB没有模式,文档的键不会事先定义也不会固定不变. 容易扩展 MongoDB所采用的面向文档的数据模型,使其可以自动的在多台服务器之间分割数据,还可以平衡集群的数据和负…
教程 MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组. 基本概念 在mongodb中基本的概念是文档.集合.数据库 数据库 一个mongodb中可以建立多个数据库…
创建副本集 1. 副本集:副本集时一组服务器,其中有一个主服务器(primary),用于处理客户端请求:还有多个备份服务器(secondary),用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器会 自动将齐中一个成员升级为新的主服务器. 2. 几个关键概念: 1). 客户端在单个服务器上可以执行的请求,都可以发送到主节点执行(读.写.执行命令.创建索引等) 2). 客户端不能在备份节点上执行写操作 3). 默认情况下,客户端不能从备份节点中读取数据.在备份节点上显式地执行setSlav…
我们有这样的数据 { "_id" : 1, title: "abcdef", isbn: "6969696969", author: { last: "codingwhy<span style="font-family: Arial, Helvetica, sans-serif;">", first: "com" },</span> copies: 5 } 现在使…
索引的名字 集合中每个索引都有一个字符串类型的名字,来唯一标识索引. 服务器通过名字来操作或者删除索引. 要注意的是,索引名有字符个数限制,所以索引创建时一定要用自定义的名字,如 db.user.ensureIndex({"username":1,.......,"date":1},{"name":"XXXX"}) 一旦创建索引不成功,可以用getLastError来查看错误提示. 唯一索引 唯一索引可以确保集合的每一个文档的…
数据库使用游标来控制find的执行结果. 客户端对游标的实现通常能够对最终结果进行有效控制. 可以限制结果的数量,略过部分结果,对任意方向任意键的组合对结果进行排序,或者去执行一些功能强大的操作. 我们来看一例 var cursor = db.foo.find().sort({"x":1}).limit(3).skip(5) 上面代码的意思是:对foo集合查询文档,参照x键的值升序排序,仅显示跳过前五个后的前三个文档. 在接触过Jquery后,感觉这样的链式函数调用很眼熟. 其实他们的…
size可以获得指定数组长度的文档 db.user.find({"fruit":{"$size":3}},{"_id":0}) { "fruit" : [ "apple", "banana", "cherry" ] } { "fruit" : [ "apple", "banana", "pear&q…
利用all来查询所以满足的匹配项,已知数据库有这些数据 db.user.find({},{"_id":0}) { "fruit" : [ "apple", "banana", "cherry" ] } { "fruit" : [ "apple", "banana", "pear" ] } { "fruit"…
not 是元条件句,可以用于任何条件之上,意为取反…
我们再添加一个游泳的人,并用$in查询游泳的人 db.user.find({"hobby":{"$in":["swimming"]}},{"_id":0}) { "hobby" : "swimming", "gender" : "female" } { "hobby" : "swimming", "…
$in可以查询一个键的多个值 举例,每个人有爱好,假定为一个,数据太多,咱们用第二个参数来过滤一下 db.user.find({},{"_id":0}) { "hobby" : "swimming", "gender" : "female" } { "hobby" : "dancing", "gender" : "male" }…
$ne表示不相等 db.user.find({"name":{"$ne":"william"}})…
$lt $lte $gt $gte 以上四个分别表示为:< . <= . > . >= . 通常的做法是将他们组合起来,以便查找一个范围. 比如,查询年龄在18到25岁(含)的人,我们可以这样 db.user.find({"age":{"$gte":18,"$lte":25}}) 这样的范围查询对查询日期特别有用 比如,查询在2015年1月1日后注册的用户 start = new Date("01/01/2015…
当一次更新一个文档无法满足我们的脚步时,我们可以选择一次更新多个文档,及在update的第四个参数的位置添上true,及做多文档更新,建议就算不做多文档更新也显式的在第四个参数上置false,这样明确易懂,也可以在默认参数变化时从容应对. 运行getLastError命令可以帮助我们获取反馈信息 db.count.update({"x":3},{$inc:{"x":2}},false,true) db.runCommand({getLastError:1}) { &…
save是一个shell函数,调用它,可以在文档不存在时插入,存在时更新,它只有一个参数:文档.如果文档有 _id 这个 键,那么save会调用upsert,否则会调用insert,非常方便.…
它可以删除所匹配的值,如果[1,1,2,1] 执行pull 1 后,只剩下[2]…
如果将数组看做队列,可以用$pop方法删除第一个或者最后一个元素 {$pop:{"key":-1}},{$pop:{"key":1}}…
用$addToSet更新可以避免重复,将它与$each组合起来,可以一次性添加多条(就算后添加的值已存在也没有关系) db.user.update({"name":"codingwhy.com"},{"$addToSet":{"hobby":{"$each":["singing","eating","dancing"]}}}) { "_i…
数组修改器,既然名字都这样叫了,那么这个修改器就只能对数组进行操作啦. db.user.update({"name":"qianjiahao"},{"$push":{"hobby":"sleeping"}}) { "_id" : ObjectId("55082691591555a6c35dd698"), "name" : "codingw…