- count 查詢符合條件的記錄數
db.getCollection('voiceBusiData').count()
db.getCollection('voiceBusiData').count({"content":"劉德華"})
複製程式碼
- aggregate 聚合查詢
查詢語句:
db.getCollection('voiceBusiData').aggregate([{$group:{_id:{"content":"$content","openId":"$openId"},sum:{$sum:"$times"}}}])
複製程式碼
查詢結果:
/* 1 */
{
"_id" : {
"content" : "朋友",
"openId" : "56662cad"
},
"sum" : NumberLong(103)
}
/* 2 */
{
"_id" : {
"content" : "dj",
"openId" : "56662cad"
},
"sum" : NumberLong(107)
}
複製程式碼
- group 分組聚合
查詢語句:
db.getCollection('voiceBusiData').group({
"key":{"openId":true},
"initial":{"count":0},
"$reduce":function(cur,pre){
pre.count = pre.count + cur.times
}
})
複製程式碼
查詢結果:
/* 1 */
[
{
"openId" : "589682",
"count" : 97.0
},
{
"openId" : "594770",
"count" : 1235.0
},
{
"openId" : "ALL",
"count" : 29530.0
},
{
"openId" : "56662d",
"count" : 28640.0
}
]
複製程式碼
查詢語句:
db.getCollection('voiceBusiData').group({
"key":{"openId":true},
"initial":{"count":0},
"reduce":function(cur,pre){
pre.count = pre.count + cur.times
},
"condition":{"times":{$lt:20}}
})
複製程式碼
查詢結果:
/* 1 */
[
{
"openId" : "58968e92",
"count" : 97.0
},
{
"openId" : "59477470",
"count" : 819.0
},
{
"openId" : "ALL",
"count" : 841.0
},
{
"openId" : "56662cad",
"count" : 815.0
}
]
複製程式碼
- mapReduce
mapReduce其實是一種程式設計模型,用在分散式計算中,其中有一個“map”函式,一個”reduce“函式。
① map:
這個稱為對映函式,裡面會呼叫emit(key,value),集合會按照你指定的key進行對映分組。
② reduce:
這個稱為簡化函式,會對map分組後的資料進行分組簡化,注意:在reduce(key,value)中的key就是emit中的key,vlaue為emit分組後的emit(value)的集合,這裡也就是很多{"count":1}的陣列。
③ mapReduce:
這個就是最後執行的函式了,引數為map,reduce和一些可選引數。
查詢語句:
db.getCollection('voiceBusiData').mapReduce(
function(){
if(this.openId!="ALL"){
emit(this.openId,{count:this.times})
}
},
function(key, value){
var result = {count:0}
for(var i = 0; i<value.length; i++){
result.count += value[i].count
}
return result
},
{"out":"testMapReduce"}
)
複製程式碼
out: 輸出表名為testMapReduce
執行資訊:
/* 1 */
{
"result" : "testMapReduce",
"timeMillis" : 472.0,
"counts" : {
"input" : 727,
"emit" : 486,
"reduce" : 18,
"output" : 3
},
"ok" : 1.0,
...
複製程式碼
result: "存放的集合名“;
input:傳入文件的個數。
emit:此函式被呼叫的次數。
reduce:此函式被呼叫的次數。
output:最後返回文件的個數。
執行結果(testMapReduce表):
/* 1 */
{
"_id" : "56662d",
"value" : {
"count" : 2640.0
}
}
/* 2 */
{
"_id" : "589682",
"value" : {
"count" : 97.0
}
}
/* 3 */
{
"_id" : "594770",
"value" : {
"count" : 135.0
}
}
複製程式碼
- distinct
查詢一個集合中特定欄位的所有不同值,返回的是一個不同值組成的陣列
The command takes the following form
{
distinct: "<collection>",
key: "<field>",
query: <query>,
readConcern: <read concern document>,
collation: <collation document>
}
複製程式碼
eg:
db.runCommand({"distinct":"voiceTime","key":"vn"})
複製程式碼
或者:
db.getCollection('voiceTime').distinct("vn")
複製程式碼
db.getCollection('location').distinct("itineraryId", {"did":"23958957", "sts":{$gt:1524355200000,$lt:1524441600000}})
複製程式碼
- 批量處理
如批量更改recResultStaticsInfo表中的時間戳
db.getCollection('recResultStaticsInfo').find({"timestamp" : 1538323200000}).forEach(
function(item){
db.getCollection('recResultStaticsInfo').update({"_id":item._id},{$set:{"timestamp":"1541260800000"}})
}
)
複製程式碼
區域性更新
db.[collectionName].update({查詢器},{修改器})
db.getCollection('recResultStaticsInfo').update({"timestamp":1535558400000},{$set:{"test":"test"}})
複製程式碼
insertOrUpdate操作
查詢器查出來資料就執行更新操作,查不出來就替換操作
db.[collectionName].update({查詢器},{修改器},true)
複製程式碼
第三個引數設定為true,代表insertOrUpdate,即存在即更新,否則插入該資料
批量更新操作
即新增第四個引數,該引數為true,則批量更新,為false,則更新一條
db.[collectionName].update({查詢器},{修改器},false, true)
複製程式碼
注意上面的修改器
$set修改器
$set修改器用來指定一個鍵值對,如果存在鍵就進行修改不存在則進行新增。
// 修改器名稱:$set
// 語法:
{$set:{field: value}}
// example:
{$set:{name:"Redis"}}
複製程式碼
- mongoexport mongo匯出工具
匯出mongo表資料
./mongoexport -h 172.31.3.18 --port 27017 -u username -p password --authenticationDatabase=admin -d auto_analyse_test -c accInfoDaily -f openId,accUser,actUserRate,ts,newUser,actUser -o ../accInfoDaily.csv
複製程式碼
其中:
-h : host
--port : port
-u : username
-p : password
-d : database
-c : collection
-q : query condition
-f : field // 欄位名稱,以","分隔
--type : csv // 匯出格式為csv
-o : outputpath
複製程式碼