renheshi 发表于 2015-7-8 09:25:15

MongoDB查询

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:}});
{ "_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:。

特定类型查询
  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:}});
{ "_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]
查看完整版本: MongoDB查询