日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java时间聚类_mongodb 按照时间聚类 java

發(fā)布時(shí)間:2025/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java时间聚类_mongodb 按照时间聚类 java 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)存儲(chǔ)到mongodb中的是string類(lèi)型的時(shí)間,小tips:

1. 那么在對(duì)此域按照時(shí)間聚類(lèi)(每周,每月)時(shí)就不能直接使用mongodb的time關(guān)鍵字了,因?yàn)閙ongodb有自己的時(shí)間類(lèi)型,且目前它只認(rèn)可自己的時(shí)間類(lèi)型。

2. 假如對(duì)于時(shí)間進(jìn)行簡(jiǎn)單的聚類(lèi),比如按照年,月,日,時(shí),分,秒來(lái)聚類(lèi),我們可以使用mongodb的substr關(guān)鍵字模擬出mongodb能夠認(rèn)可的時(shí)間類(lèi)型。

比如 2015-03-02 22:53:45 ---> 2014 這樣截取出year,2014-03-02就是截取出day。

3. 按照季度或者星期來(lái)聚類(lèi)時(shí)就有些麻煩了, 這時(shí)需要我們先分別按照月,日來(lái)進(jìn)行一步聚類(lèi),將聚類(lèi)后的中間結(jié)果在java中完成二次聚類(lèi)。比如以星期進(jìn)行聚類(lèi)時(shí)需要先按照day來(lái)取,再結(jié)合java的calendar來(lái)得出星期

db.myObject.aggregate(

{$project:{new_time_stamp:{$substr:["$time_stamp",0,10]}}},

{$group:{_id:"$new_time_stamp","count":{$sum:1}}});

mongodb聚類(lèi)

mongodb聚類(lèi)可分為三個(gè)子操作,分別是match, project, group

三個(gè)子操作均體現(xiàn)為DBObject類(lèi)型,aggregation接受List參數(shù),所以允許三個(gè)操作并列。

下面是一個(gè)例子。

$match: {type: "airfare"}, type 是一個(gè)域,而airfare是值,這里要求完全匹配。假如match更加復(fù)雜,那么可以這么寫(xiě)

$match: {type: "airfare", date: {$gte: "2015-03-03", $lte: "2015-03-05"}}

注意,match的內(nèi)容并不是一個(gè)array,而是以逗號(hào)隔開(kāi)的對(duì)象

$project: {id: {$substr: ["$date", 0, 4]}

pass along all the documents with only the specified field to the next stage of pipeline. 在默認(rèn)情況下,_id屬性會(huì)傳遞到下一階段。可以通過(guò)

"_id" : 0 來(lái)顯式的刪掉 _id 屬性。

project可以對(duì)值進(jìn)行更名操作以及concat, substr, add, mutiply, mod 操作

$group 最重要的,聚類(lèi)操作。

group必須有_id屬性,用來(lái)標(biāo)識(shí)那些被聚集的屬性。但是_id的值可以為null,用于求和求平均。

在group的時(shí)候可以同時(shí)對(duì)屬性名稱(chēng)進(jìn)行修改

$group: {

$_id : {month: {$month: "$date"}, day: {$day: "$date"}},

$totalPrice: {$sum: {$multiply: ["$price", "$quantity"]}},

$averagePrice: {$avg: ["$price"]},

count: {$sum, 1}

}

_id, totalPrice, averagePrice, count 都會(huì)分別作為一個(gè)屬性返回。

另外的屬性還包括

$sort,?按照某個(gè)屬性排序

{$sort: {age: 1, money: -1}}

$skip, $limit 表示越過(guò)多少或者僅返回多少條目。

$unwind 將數(shù)組的元素拆開(kāi)。

$out 表示為輸出的結(jié)果新建一個(gè)collection

{$out: "authors"} ,它必須作為最后pipeline的最后一個(gè)stage

一個(gè)聚類(lèi)的例子,完全使用java實(shí)現(xiàn)

DBObject fields = new BasicDBObject("url", "$uri")

DBObject project= new BasicDBObject("$project", fields)

DBObject idField= new BasicDBObject("_id", new BasicDBObject("url", "$url"));

idField.put("count", new BasicDBObject("$sum", 1));

DBObject group= new BasicDBObject("$group", idField);

DBObject sort= new BasicDBObject("$sort", new BasicDBObject("count", -1));

List pipeline =Arrays.asList(project, group, sort);

AggregationOutput output=collection.aggregate(pipeline);for(DBObject result: output.results())

System.out.println(result)

上面的代碼中DBObject的組裝相當(dāng)麻煩且看不出json的架構(gòu),因?yàn)橐粋€(gè)更好的做法是從json轉(zhuǎn)化

DBObject project = JSON.parse("{$project: {"url": \"$uri\"}}")

DBObject group= JSON.parse("{$group: {_id: {"url":"$url"}}}")

DBObject sort= JSON.parse("{$sort: {count: -1}}")

總結(jié)

以上是生活随笔為你收集整理的java时间聚类_mongodb 按照时间聚类 java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。