元の答えよりも少し現代的です:
db.collection.aggregate([
{ "$sort": { "date": 1 } },
{ "$group": {
"_id": {
"$subtract": ["$date",{"$mod": ["$date",86400000]}]
},
"doc": { "$last": "$$ROOT" }
}},
{ "$replaceRoot": { "newDocument": "$doc" } }
])
同じ原則が、基本的に $ sort
にも当てはまります。
コレクション、次に $ group
$ last
>
グループ化境界からのデータ。
元の記述では、 $$ ROOT
を使用できるため、状況が少し明確になっています。 すべてのドキュメントプロパティを指定する代わりに、もちろん $ replaceRoot
ステージでは、そのデータを元のドキュメントフォームとして完全に復元できます。
ただし、一般的な解決策は依然として $ sort
最初に、 $ group
必要な共通キーで、 $last<を保持します。 / code>
または $ first
必要なプロパティのグループ化境界からのソート順の発生に応じて。
また、質問のタイムスタンプ値ではなくBSON日付については、15分の時間間隔で結果をグループ化するを参照してください。 MongoDbで 実際にBSON日付値を使用して返す、さまざまな時間間隔で累積する方法に関するさまざまなアプローチについて。
ここで何をしようとしているのかよくわかりませんが、私の理解が正しければ、これをまとめて行うことができます。したがって、毎日の最後のレコードを取得するには:
db.collection.aggregate([
// Sort in date order as ascending
{"$sort": { "date": 1 } },
// Date math converts to whole day
{"$project": {
"adco": 1,
"hchc": 1,
"hchp": 1,
"hhphc": 1,
"ptec": 1,
"iinst": 1,
"papp": 1,
"imax": 1,
"optarif": 1,
"isousc": 1,
"motdetat": 1,
"date": 1,
"wholeDay": {"$subtract": ["$date",{"$mod": ["$date",86400000]}]}
}},
// Group on wholeDay ( _id insertion is monotonic )
{"$group":
"_id": "$wholeDay",
"docId": {"$last": "$_id" },
"adco": {"$last": "$adco" },
"hchc": {"$last": "$hchc" },
"hchp": {"$last": "$hchp" },
"hhphc": {"$last": "$hhphc" },
"ptec": {"$last": "$ptec" },
"iinst": {"$last": "$iinst" },
"papp": {"$last": "$papp" },
"imax": {"$last": "$imax" },
"optarif": {"$last": "$optarif",
"isousc": {"$last": "$isouc" },
"motdetat": {"$last": "$motdetat" },
"date": {"$last": "$date" },
}}
])
したがって、ここでの原則は、タイムスタンプ値が与えられた場合、日付計算を実行して、それを毎日の初めの真夜中の時間として予測することです。次に、 _id
として ドキュメントのキーはすでに単調(常に増加)になっているので、 WholeDay
でグループ化するだけです。 $ last
をプルしている間の値 グループ化の境界からのドキュメント。
すべてのフィールドが必要でない場合は、必要なフィールドのみを投影してグループ化します。
そして、はい、春のデータフレームワークでこれを行うことができます。そこにはラップされたコマンドがあると確信しています。ただし、それ以外の場合、ネイティブコマンドに到達するための呪文は次のようになります。
mongoOps.getCollection("yourCollection").aggregate( ... )
記録として、タイムスタンプではなく実際にBSONの日付タイプを数値として使用している場合は、日付の計算をスキップできます。
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$year": "$date" },
"month": { "$month": "$date" },
"day": { "$dayOfMonth": "$date" }
},
"hchp": { "$last": "$hchp" }
}}
])