1
皆さん、私のデータを照会する際に大きな問題があります。日ごとにハッシュタグの数をカウントし、例えば出)は、このような何かmongoとspring-data-mongoの集約クエリ
1:
{_id:"2016-12-13",
hashtags:[
{hashtag:"asd",count:20},
{hashtag:"weila",count:18},
{hashtag:"asd2",count:10},
....
]
}
{_id:"2016-12-14",
hashtags:[
{hashtag:"asd",count:18},
{hashtag:"asd2",count:14},
{hashtag:"weila",count:10},
....
]
}
を私はこのような文書があります。
{
"_id" : NumberLong(999789748357864),
"text" : "#asd #weila #asd2 welcome in my house",
"date" : ISODate("2016-12-13T21:44:37.000Z"),
"dateString" : "2016-12-13",
"hashtags" : [
"asd",
"weila",
"asd2"
]
}
を、私は2つのクエリを構築したいです
2)別のものは同じですが、2016-12-13から2016-12-17までの期間を設定します。
最初のクエリでは、私はこのクエリを書いていますが、私は春のデータMongoで検索するものを取得します。書き方はわかりません。あなたはまだ二グループステージの後に同じ集計操作の割合を引いたパイプラインの手順を使用することができますが、フィルタリングの側面のために、あなたが最初の$match
パイプラインステップで日付範囲クエリを導入する必要があると思います
db.comment.aggregate([
{$unwind:"$hashtags"},
{"$group":{
"_id":{
"date" : "$dateString",
"hashtag": "$hashtags"
},
"count":{"$sum":1}
}
},
{"$group":{
"_id": "$_id.date",
"hashtags": {
"$push": {
"hashtag": "$_id.hashtag",
"count": "$count"
}},
"count": { "$sum": "$count" }
}},
{"$sort": { count: -1}},
{"$unwind": "$hashtags"},
{"$sort": { "count": -1, "hashtags.count": -1}},
{"$group": {
"_id": "$_id",
"hashtags": { "$push": "$hashtags" },
"count": { "$first": "$count" }
}},
{$project:{name:1,hashtags: { $slice: ["$hashtags", 2 ]}}}
]);
@chridamさんのお返事ありがとうございます。私は同じことを実現していますが、このソリューションでは毎日1つのクエリを実行する必要があります。ケース2では完璧です。 Spring Dataでハッシュタグ配列をスライスしてトップ10要素だけを取得する方法を知っていますか? mongoではカウントをソートした後にプロジェクションを行います。{$ project:{name:1、hashtags:{$ slice:["$ hashtags"、2]}}} 'しかし、私が使用するリリースでは$ sliceは実装されていません。私は内側の構造をソートし、それを制限する必要がありますが、春のデータmongo私はどのように行うかわからない、任意の提案? – dantavo
集計クエリのグループの後にこの 'project(" name ")。(" hashtags ")プロジェクト(" slice "、2))を追加してください。 – Veeram
@SagarReddyありがとうございました。結果は正しい。集計関数の2番目のグループステップの直前に限度(2)を置いていますが、私はあなたが私に甘えているものとこの命令を変更します;) – dantavo