MongoDB查詢語法


mongoDb是非關系型數據庫,用習慣了mssql,mysql等數據庫的需要轉換一下思維

mongoDb存的是與js的json結構一樣的文檔,表中的每一條記錄都可以結構不同

 

1,大於,小於,大於等於,小於等於

$gt 大於   >

$lt 小於    <

$gte 大於或等於  >=

$lte  小於等於     <=

示例

db.collection.find({age:{$gt:18}});  //年齡大於18歲,不包含18歲

SQL:SELECT * FROM Collection WHERE age>18

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM