1

個別の値の数を取得し、関連するフィールドを表示するクエリを派生させようとしています。グループ化は、tempIdおよび が1 日内および時間枠内で発生する可能性があるdate場所によって行われます。tempIdone-to-many

以下は私のアプローチです、

db.getCollection('targetCollection').aggregate(    
{    
   $match:{    
       "user.vendor": 'vendor1',     
       tool: "tool1",     
       date: {    
           "$gte": ISODate("2016-04-01"),    
           "$lt": ISODate("2016-04-04")    
       }    
    }    
},     
{    
   $group:{    
       _id: {     
           tempId: '$tempId',
           month: { $month: "$date" },     
           day: { $dayOfMonth: "$date" },     
           year: { $year: "$date" }     
       },    
       count: {$sum : 1}    
    }     
},
{    
   $group:{    
       _id: 1,    

       count: {$sum : 1}    
    }     
})

このクエリは、次の出力を生成します。

{
    "_id" : 1,
    "count" : 107
}

これは正しいですが、日付とその日付の特定のカウントで区切って表示したいと思います。たとえば、このようなもの、

{
    "date" : 2016-04-01
    "count" : 50
},
    {
    "date" : 2016-04-02
    "count" : 30
},
    {
    "date" : 2016-04-03
    "count" : 27
}

PS私はこの技術にまったく慣れていないので、この質問をまとめる方法がわかりません. 質問で改良が必要な場合はお知らせください。

以下は、クエリしようとしている mongodb コレクションのサンプル データです。

{
    "_id" : 1,
    "tempId" : "temp1",
    "user" : {
        "_id" : "user1",
        "email" : "user1@email.com",
        "vendor" : "vendor1"
    },
    "tool" : "tool1",
    "date" : ISODate("2016-03-09T08:30:42.403Z")
},...
4

2 に答える 2

2

私は自分で解決策を考え出しました。私がしたことは、

  • 最初に と でグループ化しましtempIddate
  • 次に、date

これは、私が望む結果である の毎日の個別のカウントを出力しました。tempIdクエリは次のとおりです。

db.getCollection('targetCollection').aggregate(    
{    
   $match:{    
       "user.vendor": 'vendor1',     
       tool: "tool1",     
       date: {    
           "$gte": ISODate("2016-04-01"),    
           "$lt": ISODate("2016-04-13")    
       }    
    }    
},     
{    
   $group:{    
       _id: {     
           tempId: "$tempId",
           month: { $month: "$date" },     
           day: { $dayOfMonth: "$date" },     
           year: { $year: "$date" }     
       },    
       count: {$sum : 1}    
    }     
},
{    
   $group:{    
       _id: {     
           month:"$_id.month" ,     
           day: "$_id.day" ,     
           year: "$_id.year"     
       },    
       count: {$sum : 1}    
    }     
})
于 2016-04-12T11:06:32.060 に答える
0

日付でグループ化する

db.getCollection('targetCollection').aggregate([
    {
       $match:{    
           "user.vendor": 'vendor1',     
           tool: "tool1",     
           date: {    
               "$gte": ISODate("2016-04-01"),    
               "$lt": ISODate("2016-04-04")    
           }    
        }    
    },
    {
        $group: {
            _id: {
                date: "$date",
                tempId: "$tempId"
            },
            count: { $sum: 1 }
        }
    }
]);
于 2016-04-12T10:11:07.607 に答える