程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> MongoDB查詢、索引和聚合

MongoDB查詢、索引和聚合

編輯:DB2教程

MongoDB查詢、索引和聚合


初始化mongodb數據庫

> use deng
switched to db deng
> db.createCollection("jingdong")            #無參數
{"ok":1}
> show collections
jingdong
system.indexes
> userdoc1=({"user_id":1,"name":"cloud","state":"active","actor":"user","e-mail":"[email protected]","VM_num":2,"time":[{"date":"2014-08-12","hour":"10:53 PM"}] })        
> userdoc2=({"user_id":2,"name":"testadmin","state":"active","actor":"admin","e-mail":"[email protected]","VM_num":2,"time":[{"date":"2014-08-11","hour":"06:34 AM"}] })    
> doc=({"name":"peter","position":"teacher"})
> db.jingdong.insert(userdoc1)
WriteResult({"nInserted":1})
> db.jingdong.insert(userdoc2)
WriteResult({"nInserted":1})
> db.jingdong.insert(doc1)
WriteResult({"nInserted":1})

查詢語句

db.jingdong.find() #相當於select * from jingdong;
條件操作符

mongodb中的條件操作符有: (>) 大於 - \$gt #greate (<) 小於 - \$lt #low (>=) 大於等於 - \$gte #equal (<= ) 小於等於 - \$lte

例子:
> db.jingdong.find({user_id:{$gt:1}})
> db.jingdong.find({user_id:{$lte:2,$gt:1}})
#type的值
雙精度型-1
字符串-2
對象-3
數組-4
二進制數據-5
對象ID-7
布爾類型-8
數據-9
空-10
正則表達式-11
JS代碼-13
符號-14
有作用域的JS代碼-15
32位整型數-16
時間戳-17
64位整型數-18
Min key-255
Max key-127


db.jingdong.find({"name":{$type:2}}) #查找name是字符串的文檔記錄

limit和skip

讀取指定數量的數據記錄 -limit
db.shiyanlou.find().limit(1) #讀取一條記錄,默認是排在最前面的那一條被讀取

讀取時跳過指定數量的數據記錄 -skip
db.shiyanlou.find().limit(1).skip(1)

MongoDB排序 -sort()


與sqlite中的排序一樣有升序和降序,其中升序用1表示,降序用-1表示 db.jingdong.find().sort({"time":1})

索引 - ensureIndex()

索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,無疑對網站的性能是非常致命的。索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對數據庫集合中一個文檔或多個文檔的值進行排序的一種結構。

db.COLLECTION_NAME.ensureIndex({KEY:1|-1})
> db.shiyanlou.ensureIndex({"name":1}) #1代表升序 -1代表降序


> db.shiyanlou.ensureIndex({"user_id":1,"name":1},{background:1})
ensureIndex參數表格如下:
參數 類型 描述 background Boolean 建立索引要不要阻塞其他數據庫操作,默認為false unique Boolean 建立的索引是否唯一,默認false name string 索引的名稱,若未指定,系統自動生成 dropDups Boolean 建立唯一索引時,是否刪除重復記錄,默認flase sparse Boolean 對文檔不存在的字段數據不啟用索引,默認false expireAfterSeconds integer 設置集合的生存時間,單位為秒 v index version 索引的版本號 weights document 索引權重值,范圍為1到99999 default-language string 默認為英語 language_override string 默認值為 language

聚合 -aggregate()

db.COLLECTION_NAME.aggregate({
$match:{x:1},
{limit:NUM},
$group:{_id:$age}
})
$match:查詢,跟find一樣;
$limit:限制顯示結果數量;
$skip:忽略結果數量;
$sort:排序;
$group:按照給定表達式組合結果。
> db.jingdong.aggregate([{$group:{_id:"$name", user:{$sum:"$user_id"}}}])
名稱 描述 $sum 計算總和 $avg 計算平均值 \$min和$max 計算最小和最大值 $push 在結果文檔中插入值到一個數組 $addToSet 在結果文檔中插入值到一個數組,但不創建副本 $first 根據資源文檔的排序獲取第一個文檔數據 $last 根據資源文檔的排序獲取最後一個文檔數據

管道

MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操作是可以重復的。表達式:處理輸入文檔並輸出。表達式是無狀態的,只能用於計算當前聚合管道的文檔,不能處理其它的文檔。 聚合框架中常用的幾個操作:
$project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用於創建計算結果以及嵌套文檔。
$match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標准查詢操作。
$limit:用來限制MongoDB聚合管道返回的文檔數。
$skip:在聚合管道中跳過指定數量的文檔,並返回余下的文檔。
$unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
$group:將集合中的文檔分組,可用於統計結果。
$sort:將輸入文檔排序後輸出。
$geoNear:輸出接近某一地理位置的有序文檔。
> db.shiyanlou.aggregate([{$match:{user_id:{$gt:0,$lte:2}}},{$group:{_id:"user",count:{$sum:1}}}])
{"_id":"user","count":2}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved