1

を動作しないカウント私はのように見える文書を持っている、のMongoDB UNIX時間でグループと

{ 
    "_id" : ObjectId("57dffd3b65291f06dab34385"), 
    "user" : "12345667890" 
    "time" : NumberLong(1474297140186) 
} 

私は、特定のアプリケーションのための訪問者の数をカウントしようとしています。私は64フィールドと私のクエリは以下のように見えます。

私はそれのように返します(別の日からのデータが存在するとして)、いくつかのグループを探していたとしても
db.convo_log.aggregate([ 
    { 
     '$group': { 
      '_id': { 
       month: { $month: new Date("$time") }, 
       day: { $dayOfMonth: new Date("$time") }, 
       year: { $year: new Date("$time") } 
      }, 
      'count': { '$sum': 1 } 
     } 
    } 
]) 

{ 
    "_id" : { 
     "month" : 8, 
     "day" : 17, 
     "year" : 292278994 
    }, 
    "count" : 64.0 
} 

は、私がここで間違ってやっているものはありますか?

+0

:だから$dateToStringオペレータで完全にこれを入れて、あなたは望ましい結果を得るために、このパイプラインを実行することができます。あなたが私たちに見せた文書に期待される結果は何ですか?また、既存のフィールド値を使用して新しい日付を作成することはできません。 – styvane

+0

@Styvane Pardon me。私は問題を修正した – Dinal24

答えて

2

タイムスタンプから日付オブジェクト表現を作成することはできません。 arithmetic operators、つまり$addnew Date(0)オブジェクトコンストラクタのタイムスタンプを使用して、エポックから0ミリ秒(短い形式ですが)の日付を表す算術演算を行う必要があります。

合計{ "$add": ["$time", new Date(0)] }の結果、新しい日付オブジェクトになります。私はあなたの文書に `entry`フィールドを見ることができなかった

db.convo_log.aggregate([ 
    { 
     "$project": { 
      "formattedDate": { 
       "$dateToString": { 
        "format": "%Y-%m-%d", 
        "date": { "$add": ["$time", new Date(0)] } 
       } 
      } 
     } 
    }, 
    { 
     "$group": { 
      "_id": "$formattedDate", 
      "count": { "$sum": 1 } 
     } 
    } 
]) 
関連する問題