はい。 日付演算子
を使用できます $substr
を使用 および
db.test.aggregate([
{"$group": {
"_id" : { "$concat": [
{"$substr": [{"$year": "$date"}, 0, 4 ]},
"-",
{"$substr": [{"$month": "$date"}, 0, 2 ]},
"-",
{"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
]},
"count": {"$sum": 1 }
}},
{"$sort": { "_id": 1 }}
])
日付演算子だけを使用して、次のようにドキュメントを作成できます。
"day": {
"year": {"$year": "$date" },
"month": {"$month": "$date"},
"day": {"$dayOfYear": "$date"}
}
それも同様に機能します。しかし、これはあなたに素晴らしい文字列を与えます。これは、$substr
という事実を利用しています 整数から文字列にキャストします。それがドキュメントに追加された場合。
日付演算子 を見てください 日付で使用できる他の時間区分で使用するためのドキュメント。
さらに良いことに、日付計算を使用してBSON日付を返します:
import datetime
db.test.aggregate([
{ "$group": {
"_id": {
"$add": [
{ "$subtract": [
{ "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
{ "$mod": [
{ "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
1000 * 60 * 60 * 24
]}
]},
datetime.datetime.utcfromtimestamp(0)
]
},
"count": { "$sum": 1 }
}},
{ "$sort": { "_id": 1 } }
])
ここでdatetime.datetime.utcfromtimestamp(0)
「エポック」を表すBSON日付としてパイプラインに送られます。 $subtract
あるBSON日付と別の日付のミリ秒単位の差が返されます。これにより、 $mod
結果は、1日からの残りのミリ秒の差を取得します。
$add
についても同じことが言えます。
ここで、BSON日付を数値に「追加」すると、BSON日付になります。