已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅谈 MongoDB 中几种不同查询方法 1.find MongoDB 使用 find 来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从 0个文档到整个集合.find 的第一个参数 决定了要返回哪些文档.其形式也是一个文档,说明要查询的细节. 空的查询文档会匹配集合的全部内容.要是不指定查询文档 ,默认是. 如:db.users.find()返回集合 users 中的所有内容. 向查询文档中添加键值对,就意味着添加了查询条件.对绝大多数类型来说,整数匹配整 数,布尔类型匹配布尔类型,字符串匹配 字符串. 2.指定返回的键 有时并不需要返回文档中的所有键值对返回.可以通过 find 或 findOne 的第二个参数来 指定要返回的键.这样做能节省传输的 数据量,又能节省客户端解码文档的时间和内存消耗. db.users.findOne(“name“:“refactor“,“age“:1,“sex“:1) 只会将键为_id,age,sex 的数据返回. “_id“键总是会被返回. 也可以用第二个参数来剔除查询结果中的某个键值对. 如: 键 name 不会显示在返回的结果中 db.users.findOne(“name“:“refactor“,“name“:0) 只会将键为 age,sex 的数据返回.“_id“键是不会返回的 db.users.findOne(“name“:“refactor“,“age“:1,“sex“:1,“_id“:0) 3.查询条件 “$lt“,“$lte“,“$gt“,“$gte“分别对应,= 如: 查询 age =18 =30 db.users.find(“age“:“$gte“:18,“$lte“:30) 向文档增加键 birthday db.users.update( “name“:“refactor“, “$set“: “birthday“:new Date(“1989/10/26“) ) 查询 birthday 日期是1990-1-1之前的人 db.users.find(“birthday“:“$lt“:new Date(“1990/01/01“) 使用“$ne“ 查出所有 name 不等 refactor1的文档,注意 文档中不存在键 name 的文档也会被查出来 db.users.find(“name“:“$ne“:“refactor1“) 使用 or 查询 MongoDB 可以使用“$in“,“$or“ 使用“$in“ 查询出 pageViews 为10000,20000的数据 db.users.find(pageViews:“$in“:10000,20000) “$in“可以指定不同类型的条件和值,如正在将用户的 ID 号迁移成用户名的过程中,要做 到两者兼顾的查询: db.users.find(“user_id“:“$in“:12345,“refactor“) 这会匹配 user_id 为12345和“refactor“的文档. 要是 “$in“的数组只有一个值和直接匹配这个值效果是一样的. db.users.find(“pageViews“:“$in“:10000) db.users.find(“pageViews“:10000) 使用“$nin“ 返回与数组中所有条件都不匹配的文档 如 查出所有 pageViews 不等10000,20000的文档,注意 文档中不存在键 pageViews 的文 档也会被查出来 db.users.find(“pageViews“:“$nin“:10000,20000) “$in“能对单个键进行 or 查询. 使用“$or“ db.users.find( “$or“: “pageViews“:“$in“:10000,20000, “url“:“/refactor“ ) 这将查询出 pageViews 是10000,20000或 url 是 /refactor 的文档. 注意:使用普通的 and 查询时,要尽量将最苛刻的条件放在前面. 使用“$not“ “$not“可以用在任何条件之上. 如: db.users.find( “id_num“:“mod“:5,1 ) 这会查询出 id_num 取模后值为1的文档. db.users.find( “id_num“:“$not“:“mod“:1,5 ) 4.条件句的规则 在查询中,“$lt“在内层文档,在更新中“$inc“ 是外层文档的键. 条件句是内层文档的键,修改器是外层文档的键. 可对一个键应用多个条件,但一个键不能对应多个更新修改器. 5.特定于类型的查询 null 可以匹配自身,而且可以匹配“不存在的“ 能查出 url 是“/refactor“,pageViews 为 null 的文档 db.users.find(“url“:“/refactor“,“pageViews“:nul l) 能查出 pageViews 为 null 的文档 ,不存在键 pageViews 的也能查出来 db.users.find(“pageViews“:null) 能查出 url 是“/refactor“,pageViews 为 null 的文档,但不能查出不 存在键 pageViews 的的文档 db.users.find(“url“:“/refactor“,“pageViews“:“$in“:null,“$exists“:true) MongoDB 没有“$eq“操作符,但是只有一个元素的“$in“的操作效果是一样的 如果仅仅想要匹配键值为 null 的文档,既要检查该键的值是否为 null,还要通过“$exists“ 条件判断该键是不是存在. 6.正则表达式 正则表达式能够灵活有效的匹配字符串. 查找所有名包含 refact 或 Refact 的用户,使用正则表达式执行忽略大小写的匹配 db.users.find(“name“:/refact/i) 系统可以接受正则表达式标识(i),但不是一定有.现在匹配了各种大小写形式的 refact. MongoDB 可以为前缀型正则表达式( 如:/refactor/) 查询创建索引.所以这种类型的查询 非常高效. 正则表达式也可以匹配自身 如 db.users.find(“name“:/refact/) 可以查出 name 为/refact/的文档 . 7.查询数组 数组很大多数情况下可以这样理解:每一个元素都是整个键的值. db.users.findOne(“userName“:“refactor“,“emails“:“295240648“)能匹配到 使用“$all“ 如果需要多个元素来匹配数组,就要用“$all“ db.users.insert(“userName“:“refactor“,emails:“295240648“,“295240648163.co m“,“295240648126.com“) db.users.insert(“userName“:“refactor“,emails:“295240648“,“295240648126.com“,“2 95240648111.com“) db.users.insert(“userName“:“refactor“,emails:“295240648126.com“,“295240648163.com“,“ 295240648111.com“) 要找到邮箱有“295240648163.com“又有“295240648126.com“,顺序无关紧要的文档 db.users.find( “emails“: “$all“: “295240648163.com“, “295240648126.com“ ) 要是只对一个元素的数组使用“$all“就和不用“$all“是一样的,如 db.users.find(“emails“:“$all“:“295240648126.com“) db.users.find(“emails“:“295240648126.com“) 效果是一样的. 也可以精确的匹配数组 db.users.find(“userName“:“refactor“,emails:“295240648“,“29524 0648163.com“,“295240648126.com“) 若想查询数组指定位置的元素,需要使用 key.index 语法指定下标 db.users.find(“emails.1“:“295240648163.com“) 使用“$size“ “$size“可以查询指定长度的数组 查询数组长度为3的数组 db.users.find(“emails“:“$size“:3) 常见的查询是数组长度范围的查询.“$size“并不能与其他查询子句组合(如:“$gt“), 但是这 种查询可以通过 在文档中添加一个“size“ 键的方式来实现.这样每一次向指定数组添加元素的时候,同时 增加“size“值.原来这样 的更新: db.users.update(“$push“:“emails“:“295240648139.com“) 变成这样的更新: db.users.update(“$push“:“emails“:“295240648139.com“,“$inc“:“size“:1) 这样就可以这样查询了 db.users.find(“size“:“$gt“:3) 使用“$slice“查询 find 的第二个参数是可选的,可以指定返回那些键,“$slice“返回数组的一个子集合 返回 emails 数组的前两个元素 db.users.find(“userName“:“refactor“,“emails“:“$slice“:2) 返回 emails 数组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论