浅谈mongodb中query查询
|
Mongodb最大的功能之一就是它支持动态查询,就跟传统的关系型数据库查询一样,但是它的查询来的更灵活。 一、 Query Expression Objects:查询表达式对象 查询表达式文档也是一个BSON结构的文档,例如,我们可以用下面的查询语句来查询集合中的所有记录: 复制代码 代码如下: 这里,我们将会查询出所有“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,3 ] }
> db.things.find({a:{$all:[2,3]}});
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"),3 ] }
> db.things.find({a:{$all:[1,3 ] }
> db.things.find({a:{$all:[1]}});
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"),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,"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,"age" : 20 }
5) $ne $ne意思是not equal,不等于,不用多说,看例子:
> db.user.find().limit(5);
{ "_id" : 0,"age" : 20 }
> db.user.find({_id:{$ne:0}}).limit(5);
{ "_id" : 1,"age" : 20 }
{ "_id" : 5,"name" : "user5","userid" : 5,"age" : 20 }
6) $in $in操作类似于传统关系数据库中的IN,看例子:
//数据库中有所有数组对应的记录
> db.user.find({_id:{$in:[2,4,5,6]}}).limit(5);
{ "_id" : 2,"age" : 20 }
{ "_id" : 6,"name" : "user6","userid" : 6,"age" : 20 }
//因为数据库中没有_id=1111的记录
> db.user.find({_id:{$in:[2,1111]}}).limit(5);
{ "_id" : 2,"age" : 20 }
7) $nin $nin跟$in操作相反,看例子:
//扣掉_id=1/2/3/4的记录
> db.user.find({_id:{$nin:[1,4]}}).limit(5);
{ "_id" : 0,"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,"age" : 20 }
> db.user.find({$or:[{_id:2},{userid:4}]}).limit(5);
{ "_id" : 2,"age" : 20 }
以上所述就是本文的全部内容了,希望大家能够喜欢。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
