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