鍍金池/ 問答/數(shù)據(jù)庫/ Mongo查詢?nèi)ブ睾蟮目倲?shù)

Mongo查詢?nèi)ブ睾蟮目倲?shù)

Mongo里現(xiàn)有一批數(shù)據(jù),大致結(jié)構(gòu)如下:

{"userId":1,"loginTime":ISODate("2017-11-28T10:47:57.525+08:00")}
{"userId":2,"loginTime":ISODate("2017-11-28T11:47:57.525+08:00")}
{"userId":1,"loginTime":ISODate("2017-11-28T12:47:57.525+08:00")}
{"userId":3,"loginTime":ISODate("2017-11-28T13:47:57.525+08:00")}

要按userId字段去重后統(tǒng)計(jì)總數(shù),示例數(shù)據(jù)返回結(jié)果應(yīng)該是:3,在SHELL中可以使用

db.logins.distinct("userId").length

來查詢,但在spring-data-mongo中使用MongoTemplate怎樣實(shí)現(xiàn)相同功能,注意不能使用distinct把結(jié)果都查出來后取size,實(shí)際的數(shù)量級可能比較大,如千萬級別。

另外聽說Mongodistinct結(jié)果集不能超過16MB(不確定),那么上面SHELL中的用法應(yīng)該也會(huì)有問題。

整個(gè)需求可以簡單描述為:查詢每日登錄人數(shù)(注意不是人次)

回答
編輯回答
心上人

本人測試過一些用法,但都不能滿足上述需求:

// 實(shí)際返回一個(gè)List,這樣計(jì)算總數(shù)肯定不合算
mongoTemplate.getCollection(collectionName).distinct("userId")
2017年1月11日 16:34