设为首页 收藏本站
查看: 1368|回复: 0

[经验分享] MongoDB查询

[复制链接]

尚未签到

发表于 2015-7-8 09:25:15 | 显示全部楼层 |阅读模式
find查询
  find的第一个参数是返回哪些文档,类是于sql里面的where语句
  如在集合user里面就是
  
> db.user.find()
  其中默认参数为{},默认会查询全部的内容。当我们在查询文档中添加键值,就表示了查询的条件,如:



> db.user.find()
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
{ "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
> db.user.find({age:2});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
>
  查询多个键值时


> db.user.find({age:2});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
> db.user.find({age:2,username:'wangwu'});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
> db.user.find({age:2,username:'wangwu',password:'abc'});
>

  指定返回键
  有时候我们并不需要所有满足条件的都返回,可以用find的第二个参数来指定想要的键,这样即会节约传输的数据量,也会节约客户端的解析时间。
  当我们需要的时候就将指定键的值设置为1,不需要就设置为0,其中_id为必须返回值



> db.user.find({age:2},{username:0});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a" }
> db.user.find({age:2},{username:1});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "username" : "wangwu" }
查询条件

操作符表示
$lt=
  例如查询年龄在(1,10)之间的文档


> db.user.find({age:{$lt:10,$gt:1}});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }

or查询
  MongoDB中的or查询有两种方式
  $in可以用来查询一个键的多个值,和sql里面的in类似



> db.user.find({age:{$in:[1,2]}});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
{ "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
>
  $or用来完成多个键的任意给定值,和sql的or类似,



> db.user.find({$or:[{age:2},{abc:123}]})
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
{ "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
>
  or里面还可以包含其他条件,如将age的条件2修改成前面的$in:[1,2]。

特定类型查询
  null
  匹配null和不存在类型,如果要只匹配null需要用$exists:true来来判断

正则表达式
  正则表达式能够灵活的匹配字符串
  ps.有点类是于sql里面的like,但是比like要灵活的多
  语法以/开头/结尾,和javascript中的正则表达式相同
  如查询用户名中包含w的用户



> db.user.find({username:/w/})
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }

查询数组

直接查询



> db.user.find({arr:2});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
匹配多个 $all



> db.user.find({arr:{$all:[2,3]}});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
>
查询指定长度的数组 $size



> db.user.find({arr:{$size:3}});
> db.user.find({arr:{$size:4}});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
>

返回指定的数据条数 $slice



> db.user.findOne({age:2},{arr:{$slice:2}});
{
"_id" : ObjectId("51b28f74b73ec06e42c91598"),
"age" : 2,
"arr" : [
2,
3
],
"password" : "a",
"username" : "wangwu"
}
>

  

$where查询
  $where可以执行任意javascript语句作为查询的一部分

> db.user.find({$where:function(){if(this.age==2)return true ; return false;}});
{ "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
4 ], "password" : "a", "username" : "wangwu" }
>


游标
  数据库使用游标来返回find的执行结果
  当调用find的时候,shell并不立即查询数据库,而是等待真正开始获取结构的时候才发送查询请求。
  limit(n) 限制返回结构数量
  skip(n) 忽略指定数量
  sort ({x1:n1,x2:n2……}) 排序n为1升序 –1 降序

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84381-1-1.html 上篇帖子: 项目总结——MVC+MongoDB实现文件上传 下篇帖子: MongoDB中的Group By
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表