mongoDb是非关系型数据库,用习惯了mssql,mysql等数据库的须要转换一下思惟mysql
mongoDb存的是与js的json结构同样的文档,表中的每一条记录均可以结构不一样正则表达式
1,大于,小于,大于等于,小于等于sql
$gt 大于 >mongodb
$lt 小于 <数据库
$gte 大于或等于 >=express
$lte 小于等于 <=json
示例数组
db.collection.find({age:{$gt:18}}); //年龄大于18岁,不包含18岁post
SQL:SELECT * FROM Collection WHERE age>18spa
db.collection.find({age:{$lt:25}}); //年龄小于25岁,不包含25岁
SQL:SELECT * FROM Collection WHERE age<25
db.collection.find({age:{$gte:18}});//年龄大于等于18岁的,包含18岁
SQL:SELECT * FROM Collection WHERE age >=18
db.collection.find({age:{$lte:25}});//年龄小于等于25岁的,包含25岁
SQL:SELECT * FROM Collection WHERE age<=25
也能够将两个条件合并,以下
db.collection.find({age:{$gt:18,$lt:25}}) ;//18<age<25;
2,不等于
$ne 不等于 noe equals
db.collection.find({age:{$ne:18}}) ;//年龄不等于18
3,in,not in
$in,$nin
语法
db.collection.find({field:{$in:array}});
db.collection.find({field:{$nin:array}});
示例:
db.collection.find({id:{$in:[1,2,3,4]}})
db.collection.find({id:{$nin:[1,2,3,4]}});
4,$exists 验证一个元素是否存在
这个语法有点绕
db.collection.find({title:{$exists:true}}); //若是记录中有包含title属性的所有返回
db.collection.find({title:{$exists:false}}); //若是记录中有包含title属性的所有不返回,不包含title属性的所有返回
5,正则表达式
mongo支持正则表达式,如:
db.customers.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小写
支持正则表达式查询让mongDb具备至关强大的查询功能,不过同时须要开发者比较了解正则表达式
6 查询数据内的值
下面的查询是查询colors内red的记录,若是colors元素是一个数据,数据库将遍历这个数组的元素来查询。db.things.find( { colors : "red" } );
7 $elemMatch
若是对象有一个元素是数组,那么$elemMatch能够匹配内数组内的元素:
> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } )
{ "_id" : ObjectId("4b5783300334000000000aa9"),
"x" : [ { "a" : 1, "b" : 3 }, 7, { "b" : 99 }, { "a" : 11 } ]
}$elemMatch : { a : 1, b : { $gt : 1 } } 全部的条件都要匹配上才行。
注意,上面的语句和下面是不同的。
> t.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )
$elemMatch是匹配{ "a" : 1, "b" : 3 },然后面一句是匹配{ "b" : 99 }, { "a" : 11 }
8 查询嵌入对象的值
db.postings.find( { "author.name" : "joe" } );
注意用法是author.name,用一个点就好了。更详细的能够看这个连接: dot notation
举个例子:
> db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}})
若是咱们要查询 authors name 是Jane的, 咱们能够这样:
> db.blog.findOne({"author.name" : "Jane"})
若是不用点,那就须要用下面这句才能匹配:
db.blog.findOne({"author" : {"name" : "Jane", "id" : 1}})
下面这句:
db.blog.findOne({"author" : {"name" : "Jane"}})
是不能匹配的,由于mongodb对于子对象,他是精确匹配。
9 元操做符 $not 取反
如:
db.customers.find( { name : { $not : /acme.*corp/i } } );db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );
以上是经常使用的查询语法,下一篇将介绍复合查询
最好的文档仍是官方文档,英文好的能够本身看看
http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions