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