Mongodb最大的功能之一就是它支持动态查询,就跟传统的关系型数据库查询一样,但是它的查询来的更灵活。
一、 Query Expression Objects:查询表达式对象
查询表达式文档也是一个BSON结构的文档,例如,我们可以用下面的查询语句来查询集合中的所有记录:
db.users.find({})
这里,表达式对象是一个空文档,在查询的时候去去匹配所有的记录。再看:
这里,我们将会查询出所有“last_name”属性值为“Smith”的文档记录。
二、查询选项
除了查询表达式意外,Mongodb还支持一些额外的参数选项。例如,我们可能仅仅只想返回某些特定的字段值:
注: _id字段始终都会被返回,哪怕没有明确指定
三、查询条件
1) <, <=, >, >=
// 大于: field > value db.collection.find({ \"field\" : { $gt: value } } ); //小于:field < value db.collection.find({ \"field\" : { $lt: value } } ); //大于等于: field >= value db.collection.find({ \"field\" : { $gte: value } } ); //小于等于:field<=value db.collection.find({ \"field\" : { $lte: value } } );
2) $all
$all操作类似$in操作,但是不同的是,$all操作要求数组里面的值全部被包含在返回的记录里面,如:
> use test; switched to db test > db.things.insert({a:[1,2,3]}); > db.things.find(); { \"_id\" : ObjectId(\"4de73360059e7f4bdf907cfe\"), \"a\" : [ 1, 2, 3 ] } > db.things.find({a:{$all:[2,3]}}); { \"_id\" : ObjectId(\"4de73360059e7f4bdf907cfe\"), \"a\" : [ 1, 2, 3 ] } > db.things.find({a:{$all:[1,2,3]}}); { \"_id\" : ObjectId(\"4de73360059e7f4bdf907cfe\"), \"a\" : [ 1, 2, 3 ] } > db.things.find({a:{$all:[1]}}); { \"_id\" : ObjectId(\"4de73360059e7f4bdf907cfe\"), \"a\" : [ 1, 2, 3 ] } > db.things.find({a:{$all:[1,2,3,4]}});
3) $exists
$exists操作检查一个字段是否存在,如:
> for(var i=0;i<1000;i++) db.user.save({_id:i,name:\'user\'+i,userid:i,age:20}); //包含userid > db.user.find({userid:{$exists:true}}).limit(5); { \"_id\" : 0, \"name\" : \"user0\", \"userid\" : 0, \"age\" : 20 } { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 } //不包含sex字段 > db.user.find({sex:{$exists:false}}).limit(5);
4) $mod
$mod操作可以让我们简单的进行取模操作,而不需要用到where子句,如:
//where子句 > db.user.find(\"this._id%10==1\").limit(5); { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 11, \"name\" : \"user11\", \"userid\" : 11, \"age\" : 20 } { \"_id\" : 21, \"name\" : \"user21\", \"userid\" : 21, \"age\" : 20 } { \"_id\" : 31, \"name\" : \"user31\", \"userid\" : 31, \"age\" : 20 } { \"_id\" : 41, \"name\" : \"user41\", \"userid\" : 41, \"age\" : 20 } //$mod操作 > db.user.find({_id:{$mod:[10,1]}}).limit(5); { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 11, \"name\" : \"user11\", \"userid\" : 11, \"age\" : 20 } { \"_id\" : 21, \"name\" : \"user21\", \"userid\" : 21, \"age\" : 20 } { \"_id\" : 31, \"name\" : \"user31\", \"userid\" : 31, \"age\" : 20 } { \"_id\" : 41, \"name\" : \"user41\", \"userid\" : 41, \"age\" : 20 }
5) $ne
$ne意思是not equal,不等于,不用多说,看例子:
> db.user.find().limit(5); { \"_id\" : 0, \"name\" : \"user0\", \"userid\" : 0, \"age\" : 20 } { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 } > db.user.find({_id:{$ne:0}}).limit(5); { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 } { \"_id\" : 5, \"name\" : \"user5\", \"userid\" : 5, \"age\" : 20 }
6) $in
$in操作类似于传统关系数据库中的IN,看例子:
//数据库中有所有数组对应的记录 > db.user.find({_id:{$in:[2,3,4,5,6]}}).limit(5); { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 } { \"_id\" : 5, \"name\" : \"user5\", \"userid\" : 5, \"age\" : 20 } { \"_id\" : 6, \"name\" : \"user6\", \"userid\" : 6, \"age\" : 20 } //因为数据库中没有_id=1111的记录 > db.user.find({_id:{$in:[2,3,4,5,1111]}}).limit(5); { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 } { \"_id\" : 5, \"name\" : \"user5\", \"userid\" : 5, \"age\" : 20 }
7) $nin
$nin跟$in操作相反,看例子:
//扣掉_id=1/2/3/4的记录 > db.user.find({_id:{$nin:[1,2,3,4]}}).limit(5); { \"_id\" : 0, \"name\" : \"user0\", \"userid\" : 0, \"age\" : 20 } { \"_id\" : 5, \"name\" : \"user5\", \"userid\" : 5, \"age\" : 20 } { \"_id\" : 6, \"name\" : \"user6\", \"userid\" : 6, \"age\" : 20 } { \"_id\" : 7, \"name\" : \"user7\", \"userid\" : 7, \"age\" : 20 } { \"_id\" : 8, \"name\" : \"user8\", \"userid\" : 8, \"age\" : 20 }
8) $nor、$or
$nor跟$or相反,不好解释,看例子:
> db.user.find({$nor:[{_id:2},{name:\'user3\'},{userid:4}]}).limit(5); { \"_id\" : 0, \"name\" : \"user0\", \"userid\" : 0, \"age\" : 20 } { \"_id\" : 1, \"name\" : \"user1\", \"userid\" : 1, \"age\" : 20 } { \"_id\" : 5, \"name\" : \"user5\", \"userid\" : 5, \"age\" : 20 } { \"_id\" : 6, \"name\" : \"user6\", \"userid\" : 6, \"age\" : 20 } { \"_id\" : 7, \"name\" : \"user7\", \"userid\" : 7, \"age\" : 20 } > db.user.find({$or:[{_id:2},{name:\'user3\'},{userid:4}]}).limit(5); { \"_id\" : 2, \"name\" : \"user2\", \"userid\" : 2, \"age\" : 20 } { \"_id\" : 3, \"name\" : \"user3\", \"userid\" : 3, \"age\" : 20 } { \"_id\" : 4, \"name\" : \"user4\", \"userid\" : 4, \"age\" : 20 }
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/12432
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我