ITPub博客

首页 > Linux操作系统 > Linux操作系统 > mongdb基础-查询操作

mongdb基础-查询操作

原创 Linux操作系统 作者:zghover_cu 时间:2012-03-26 21:21:31 0 删除 编辑

mongodb基础-查询

1, find 用法

.查询就是返回一个集合中的文档的子集

.查询的一般操作是使用find,若没有向find传递参数,默认的是显示所有文档

db.blog.find()

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }

.指定多个查询条件:

db.blog.find("title":"hello", "name":"test")

.指定返回的键值

db.blog.find({},{"name":1})   #返回只包含一个键值"name"的所有记录

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo" }

可见无论指定哪些键,其中的_id键始终存在与查询结果中。

.过滤键值

db.blog.find({}, {"name":0})  //结果中不显示键name的值

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "age" : 20 }

.也可以两者结合

> db.blog.find({}, {"name":1, "age":1, "_id":0}) //只显示name和age的键/值
{ "name" : "testmongo", "age" : 20 }

2, 查询条件

"$lt","$lte","$gt","$gte" 是全部的比较操作,分别对应:<,<=,>,>=。可以将这些组合起来使用。 $ne是不等于的意思。

> db.blog.find({"age":{"$gte":18, "$lt":30}})   //查找年龄>18并且<30的记录

> db.blog.find({"age":{"$ne":20}})    //查询年龄不等于20的记录

$in 用来查询单一键和多个值的匹配。可以把多个值组织成一个数组。

> db.blog.find({"age":{"$in":[20,40]}})  //差选age为20或40的记录
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }

 //查询age为20或40的记录,不输出_id键字段
> db.blog.find({"age":{"$in":[20,40]}},{"_id":0})

 { "name" : "testmongo", "age" : 20 }

.$in可以匹配不同类型的值,也可以匹配单个值

//查找名字为jack或20或40的记录

> db.blog.find({"name":{"$in":["jack",20,40]}})  
{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }
$nin和$in的用法相同,只不过它的意义相反,表示不在...范围

$or查询多个键值的任意给定值

#查询name为jack或age为20的记录

> db.blog.find({"$or":[{"name":"jack"}, {"age":20}]})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }
{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }

$not

$mod

.关于null

#查找"commit"键的值为null的记录。但这样达不到预期效果,它不仅查出了commit为Null的记录,还查出了不存在commit键的记录,结果如下:

> db.blog.find({"commit":null})

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }
{ "_id" : ObjectId("4f70f8e1248df4040465dec8"), "name" : "test1", "age" : 30, "commit" : null }
#再次查找commit为null的记录
> db.blog.find({"commit":{"$in":[null], "$exists":true}})
{ "_id" : ObjectId("4f70f8e1248df4040465dec8"), "name" : "test1", "age" : 30, "commit" : null }
可以看到这次可以了。 $exists关键字表示是否存在的意思。
3,查询数组
数组可以看成是,每个元素的值都代表了整个键的值。
$all操作
#查询commit字段中,既包括t1又包括t2的记录
> db.blog.find({"commit":{$all:["t1","t2"]}})
{ "_id" : ObjectId("4f710330248df4040465dec9"), "name" : "tt", "commit" : [ "t1", "t2", "t3" ] }

4,$where查询

#查询blog集合中的键age的值大于40的记录,以下几种方法都可以:

> db.blog.find({$where:"this.age>40"})
> db.blog.find({age:{"$gt":40}})

> db.blog.find("this.age>40")

输出结果:

{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }

5,游标

游标就是在查询出多个记录时,在多个记录中访问的指针:

#先插入记录

> for (i=0; i<100; i++) {
... db.c.insert({x:i});
... }

#使用游标

> for (var cur=db.c.find(); cur.hasNext(); ) {
... printjson(cur.next());
... }
{ "_id" : ObjectId("4f71c294317f1d737e698fec"), "x" : 0 }
{ "_id" : ObjectId("4f71c294317f1d737e698fed"), "x" : 1 }

5.1 limit函数

#显示查询结果的数量为不多于2条,:

> db.c.find().limit(2)    #2为记录的上限
{ "_id" : ObjectId("4f71c294317f1d737e698fec"), "x" : 0 }
{ "_id" : ObjectId("4f71c294317f1d737e698fed"), "x" : 1 }

5.2 skip (n)函数

#跳过n条记录,显示跳过以后剩下的记录。若mongodb中的记录小于n条,则不返回任何记录。

> db.c.find().skip(98)    #跳过前面的0-97条记录,从98号记录开始显示
{ "_id" : ObjectId("4f71c294317f1d737e69904e"), "x" : 98 }
{ "_id" : ObjectId("4f71c294317f1d737e69904f"), "x" : 99 }

注意:若要跳过大量的记录skip是很慢的,所以要尽量避免跳过大量记录,而用查询语句来代替。

5.3 sort函数

该函数多个记录进行排序操作,该函数的参数是一个或多个键/值对,键代表要排序的键名,值代表排序的方向,1是升序,-1是降序。

有时候一个键的值是多种类型的,这时需要有一个默认的顺序:

最小值,null,数字,字符串,文档,数组,二进制数,对象ID,日期,时间,正则表达式,最大值。

待续...

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20498361/viewspace-719582/,如需转载,请注明出处,否则将追究法律责任。

下一篇: mongodb基础-索引
请登录后发表评论 登录
全部评论

注册时间:2012-03-25

  • 博文量
    12
  • 访问量
    58226