鍍金池/ 問答/數(shù)據(jù)庫/ 請問mongodb如何對特定字段進行去重并計數(shù)?

請問mongodb如何對特定字段進行去重并計數(shù)?

這是我的文檔結(jié)構(gòu):

{ 
    "_id" : ObjectId("5a159f000cf2ef0dfdfec4b7"), 
    "invalidtype" : NumberInt(1), 
    "stuMultyLoginStudy" : NumberInt(0), 
    "coaMultyLogin" : NumberInt(0), 
    "exceedRegion" : NumberInt(0), 
    "exceedTime" : NumberInt(1), 
    "exceedSimTime" : NumberInt(0), 
    "invalidTimePeriod" : NumberInt(0), 
    "enginespeedEq0" : NumberInt(0), 
    "speedEq0" : NumberInt(0), 
    "serialspeedEq0" : NumberInt(0), 
    "serialMileageEq0" : NumberInt(0), 
    "photoMiss" : NumberInt(0), 
    "totalMileagelt100" : NumberInt(0), 
    "invalidTime" : NumberInt(0), 
    "createtime" : ISODate("2017-11-24T15:00:39.093+0000"), 
    "schAccstatus" : NumberInt(0), 
    "isAccUpload" : NumberInt(0), 
    "accFailReason" : "", 
    "failReason" : "超出每日學(xué)習(xí)學(xué)時上限", 
    "trnrec" : {
        "_id" : ObjectId("5a159f000cf2ef0dfdfec4b7"), 
        "devnum" : "1428435446437541", 
        "recno" : "14284354464375411711221438", 
        "staflag" : NumberInt(1), 
        "rttype" : NumberInt(0), 
        "stunum" : "2752445573714083", 
        "classid" : NumberLong(1511357506), 
        "coachnum" : "7977552582195235", 
        "subject" : "1213000000", 
        "maxspeed" : 0.4000000059604645, 
        "mileage" : 0.0, 
        "rectime" : ISODate("2017-11-22T15:59:54.000+0000"), 
        "createtime" : ISODate("2017-11-22T16:00:00.261+0000")
    }
}

我根據(jù)以下條件篩選出幾十萬的數(shù)據(jù):

db.collectionName.find({"trnrec.rttype":0,"trnrec.createtime":{ $gte: ISODate("2017-11-23T00:00:00+0800"),  $lt: ISODate("2017-11-24T00:00:00+0800")}}) 

最后我要根據(jù)篩選的結(jié)果再按照"trnrec.stunum"這個字段進行去重并且計數(shù),請問如何寫腳本?

回答
編輯回答
離魂曲

distinct 去重返回一個數(shù)組,length 獲取長度。
distinct 第一個參數(shù)是去重字段,第二個參數(shù)是篩選條件。

db.collectionName.distinct('trnrec.stunum', {"trnrec.rttype":0,"trnrec.createtime":{ $gte: ISODate("2017-11-23T00:00:00+0800"),  $lt: ISODate("2017-11-24T00:00:00+0800")}}).length

soonfy

2017年9月20日 12:04