MongoDB数据库的查询基础操作
1, find 用法
.查询就是返回一个集合中的文档的子集
.查询的一般操作是使用find,若没有向find传递参数,默认的是显示所有文档
db.blog.find()
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5
.指定多个查询条件:
db.blog.find("title":"hello", "name":"test")
.指定返回的键值
db.blog.find({},{"name":1})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5
可见无论指定哪些键,其中的_id键始终存在与查询结果中。
.过滤键值
db.blog.find({}, {"name":0})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5
.也可以两者结合
> 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}})
> db.blog.find({"age":{"$ne":20}})
$in 用来查询单一键和多个值的匹配。可以把多个值组织成一个数组。
> db.blog.find({"age":{"$in":[20,40]}})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5
> db.blog.find({"age":{"$in":[20,40]}},{"_id":0})
.$in可以匹配不同类型的值,也可以匹配单个值
//查找名字为jack或20或40的记录
> db.blog.find({"name":{"$in":["jack",20,40]}}){ "_id" : ObjectId("4f70f21e248df4040465dec5
$nin和$in的用法相同,只不过它的意义相反,表示不在...范围
$or查询多个键值的任意给定值
#查询name为jack或age为20的记录
> db.blog.find({"$or":[{"name":"jack"}, {"age":20}]})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5
{ "_id" : ObjectId("4f70f21e248df4040465dec5
$not
$mod
.关于null
#查找"commit"键的值为null的记录。但这样达不到预期效果,它不仅查出了commit为Null的记录,还查出了不存在commit键的记录,结果如下:
> db.blog.find({"commit":null})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5{ "_id" : ObjectId("4f70f8e1248df4040465dec8
#再次查找commit为null的记录
> db.blog.find({"commit":{"$in":[null], "$exists":true}})
{ "_id" : ObjectId("4f70f8e1248df4040465dec8
可以看到这次可以了。 $exists关键字表示是否存在的意思。
3,查询数组
数组可以看成是,每个元素的值都代表了整个键的值。
$all操作
#查询commit字段中,既包括t1又包括t2的记录
> db.blog.find({"commit":{$all:["t1","t2"]}})
{ "_id" : ObjectId("4f710330248df4040465dec9
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
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
{ "_id" : ObjectId("4f71c294317f1d737e698fed
5.1 limit函数
#显示查询结果的数量为不多于2条,:
> db.c.find().limit(2)
{ "_id" : ObjectId("4f71c294317f1d737e698fec
{ "_id" : ObjectId("4f71c294317f1d737e698fed
5.2 skip (n)函数
#跳过n条记录,显示跳过以后剩下的记录。若mongodb中的记录小于n条,则不返回任何记录。
> db.c.find().skip(98)
{ "_id" : ObjectId("4f71c294317f1d737e69904e
{ "_id" : ObjectId("4f71c294317f1d737e69904f
注意:若要跳过大量的记录skip是很慢的,所以要尽量避免跳过大量记录,而用查询语句来代替。
5.3 sort函数
该函数多个记录进行排序操作,该函数的参数是一个或多个键/值对,键代表要排序的键名,值代表排序的方向,1是升序,-1是降序。
有时候一个键的值是多种类型的,这时需要有一个默认的顺序:
最小值,null,数字,字符串,文档,数组,二进制数,对象ID,日期,时间,正则表达式,最大值。
MongoDB数据库的查询基础操作