mongodb类似sqllike查询⼀、查询
find⽅法
查询所有的结果:
select * from users;
db.users.find();
指定返回那些列(键):
select name, skills from users;
db.users.find({}, {'name' : 1, 'skills' : 1});
补充说明:第⼀个{} 放where条件第⼆个{} 指定那些列显⽰和不显⽰(0表⽰不显⽰ 1表⽰显⽰) where条件:
1.简单的等于:
select name, age, skills from users where name = 'hurry';
db.users.find({'name' : 'hurry'},{'name' : 1, 'age' : 1, 'skills' : 1});
2.使⽤and
select name, age, skills from users where name = 'hurry' and age = 18;
db.users.find({'name' : 'hurry', 'age' : 18},{'name' : 1, 'age' : 1, 'skills' : 1});
3.使⽤or
select name, age, skills from users where name = 'hurry' or age = 18;
db.users.find({ '$or' : [{'name' : 'hurry'}, {'age' : 18}] },{'name' : 1, 'age' : 1, 'skills' : 1});
4.<, <=, >, >= ($lt, $lte, $gt, $gte )
select * from users where age >= 20 and age <= 30;
db.users.find({'age' : {'$gte' : 20, '$lte' : 30}});
5.使⽤in, not in ($in, $nin)
select * from users where age in (10, 22, 26);
db.users.find({'age' : {'$in' : [10, 22, 26]}});
6.匹配null
select * from users where age is null;
db.users.find({'age' : null);
7.like (mongoDB ⽀持正则表达式)
select * from users where name like "%hurry%";
db.users.find({name:/hurry/});
select * from users where name like "hurry%";
db.users.find({name:/^hurry/});
8.使⽤distinct
select distinct (name) from users;
db.users.distinct('name');
9.使⽤count
select count(*) from users;
unt();
10.数组查询(mongoDB⾃⼰特有的)
如果skills是 ['java','python']
db.users.find({'skills' : 'java'}); 该语句可以匹配成功
$all
db.users.find({'skills' : {'$all' : ['java','python']}}) skills中必须同时包含java 和 python
sql语句查询结果取反
$size
db.users.find({'skills' : {'$size' : 2}}) 遗憾的是$size不能与$lt等组合使⽤
$slice
db.users.find({'skills' : {'$slice : [1,1]}})
两个参数分别是偏移量和返回的数量
11.查询内嵌⽂档
12.强⼤的$where查询
db.foo.find();
{ "_id" : ObjectId("4e17ce0ac39f1afe0ba78ce4"), "a" : 1, "b" : 3, "c" : 10 } { "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }
如果要查询 b = c 的⽂档怎么办?
> db.foo.find({"$where":function(){
for(var current in this){
for(var other in this){
if(current != other && this[current] == this[other]){
return true;
}
}
}
return false;
}});
{ "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }
1 ) . ⼤于,⼩于,⼤于或等于,⼩于或等于
$gt:⼤于
$lt:⼩于
$gte:⼤于或等于
$lte:⼩于或等于
例⼦:
如查询j⼤于3,⼩于4:
db.things.find({j : {$lt: 3}});
db.things.find({j : {$gte: 4}});
也可以合并在⼀条语句内:
2) 不等于 $ne
例⼦:
db.things.find( { x : { $ne : 3 } } );
3) in 和 not in ($in $nin)
语法:
例⼦:
db.things.find({j:{$in: [2,4,6]}});
db.things.find({j:{$nin: [2,4,6]}});
4) 取模运算$mod
如下⾯的运算:
db.things.find( "this.a % 10 == 1")
可⽤$mod代替:
db.things.find( { a : { $mod : [ 10 , 1 ] } } )
5) $all
$all和$in类似,但是他需要匹配条件内所有的值:
如有⼀个对象:
{ a: [ 1, 2, 3 ] }
下⾯这个条件是可以匹配的:
db.things.find( { a: { $all: [ 2, 3 ] } } );
但是下⾯这个条件就不⾏了:
db.things.find( { a: { $all: [ 2, 3, 4 ] } } );
6) $size
$size是匹配数组内的元素数量的,如有⼀个对象:{a:["foo"]},他只有⼀个元素:
下⾯的语句就可以匹配:
db.things.find( { a : { $size: 1 } } );
官⽹上说不能⽤来匹配⼀个范围内的元素,如果想$size<5之类的,他们建议创建⼀个字段来保存元素的数量。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论