參考官方文檔(圖文並茂很是好看):Getting Started - MongoDB Documentation正則表達式
MongoDB的查詢功能很是強大,同時有些地方也會有點複雜。因此須要下點功夫學習和操練才能用好。mongodb
當咱們進入Mongo Shell
客戶端後,其實是進入了一個Javascript語言
的交互環境。
也就是說,MongoDB中的不少命令,尤爲是包括定義函數等高級命令,實際上都是Javascript語言,甚至說能夠是jQuery
。
瞭解了這點,一些高級命令如Aggregation學起來就會放鬆不少。函數
官方說明:
學習
:
等於$lt
: Less Than$gt
: Greater Than$gte
: Greater Than or Equal$ne
: Not Equal# age大於等於18 db.mycollection1.find( { age:{$gt: 18} } )
$and
$or
db.mycollection1.find( { $or: [ { age: {$gte: 20} }, { salary: {$gt: 5000} }, { job: "HR" } ] } )
$in
$nin
: Not Indb.mycollection1.find( { age: { $in: [10, 20, 30] } } )
有兩種方法:this
/表達式內容/
{$regex: "表達式內容"}
db.mycollection1.find( { name: /^Ja\w+$/ } ) # 或 db.mycollection1.find( { name: { $regex: "/^Jaso\w?$" } } )
# 限定顯示條數 db.mycollection1.find().limit(數量) # 跳過指定第幾條數據 db.mycollection1.find().skip(2) # 混合使用 db.mycollection1.find().limit(10).skip(3)
自定義查詢是指使用自定義函數,格式爲$where: function(){...}
spa
db.mycollection1.find( { $where: function() { return this.age >= 18; } } )
即搜索的返回值中,只顯示指定的某些字段。字段指爲0的不現實,指爲1的顯示,默認爲1。3d
# 格式爲: db.mycollection1.find( {查詢條件}, {顯示與否的選項} ) # 如: db.mycollection1.find( {}, { _id: 0, name: 1, age: 1 } )
能夠按指定的某些字段排序,字段標記爲1的爲Asc升序,標記爲-1的爲Desc降序。code
db.mycollection1.find().sort({ name:1, age:-1 })
使用count()函數。blog
db.mycollection1.find().count() db.mycollection1.count( {查詢條件} )
使用distinct()函數。排序
# 格式爲: db.集合名.distinct( "指定字段", {查詢條件} ) # 如 db.mycollection1.distinct( "job", { age: {$lt: 40} } )
Aggregation是MongoDB特有的一種Pipline管道型、聚合查詢方式。語法稍微複雜一些。
聚合管道能夠達到多步驟的分組、篩選功能。這個管道中的每個步驟,成爲一個stage
。
經常使用的管道有:
$match
:簡單的根據條件過濾篩選$group
:將數據分組,通常配合一些統計函數,如$sum
。$project
:修改document的結構。如增刪改,或建立計算結果$lookup
:$unwind
:將List列表類型的Document進行拆分$sort
$limit
$skip
語法格式爲:
db.集合名.aggregate( [ {管道表達式1}, {管道表達式2}, {管道表達式2} ] )
示例:
db.Orders.aggregate( [ {$match: { status: "A" } }, {$group: { _id: "$cut_id", total: { $sum: "$amount" } } } ] )