MongoDBには、日付から日付部分を抽出するためのさまざまなオプションが用意されています。
この記事では、MongoDBの日付から週の部分を返す3つの方法を紹介します。
サンプルデータ
cats
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") } { "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }
次の例は、born
から週の部分を返すためのさまざまなオプションを示しています。 それらのドキュメントのフィールド。
$week
オペレーター
$week
演算子は、日付の年の週を0から53までの数値として返します。
したがって、次のコードを実行して、born
から週を返すことができます。 上記のドキュメントのフィールド。
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthWeek: { $week: "$born" }
}
}
]
)
結果:
{ "birthWeek" : 1 } { "birthWeek" : 49 } { "birthWeek" : 38 }
$week
を使用するときにタイムゾーンを指定することもできます オペレーター。
MongoDB $week
を参照してください 詳細と例については。
$dateToString
オペレーター
$dateToString
演算子は、ユーザー指定の形式に従って日付オブジェクトを文字列に変換します。したがって、ユーザーは、必要に応じて週の部分だけを返すように指定できます。
日付部分ごとにフォーマット指定子があります。日付の週の部分に関しては、%U
format指定子は、その年の週と%V
を返します。 format指定子は、その年の週をISO8601形式で返します。
例:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthWeek: { $dateToString: { format: "%U", date: "$born" } },
birthWeekISO: { $dateToString: { format: "%V", date: "$born" } }
}
}
]
)
結果:
{ "birthWeek" : "01", "birthWeekISO" : "53" } { "birthWeek" : "49", "birthWeekISO" : "49" } { "birthWeek" : "38", "birthWeekISO" : "39" }
MongoDB $dateToString
を参照してください 詳細と例については。
MongoDB $dateToString
も参照してください この演算子で使用できるフォーマット指定子のリストについては、フォーマット指定子。
$isoWeek
オペレーター
週をISO8601形式で返す必要がある場合は、$isoWeek
を使用してください 。 ISO 8601年は、第1週の月曜日に始まり、先週の日曜日に終わります。
例:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthIsoWeek: { $isoWeek: "$born" }
}
}
]
)
結果:
{ "birthIsoWeek" : 53 } { "birthIsoWeek" : 49 } { "birthIsoWeek" : 39 }
この結果は、$week
を使用した場合とは異なります。 オペレーター。
違いを示す例を次に示します。
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthWeek: { $week: "$born" },
birthIsoWeek: { $isoWeek: "$born" }
}
}
]
)
結果:
{ "birthWeek" : 1, "birthIsoWeek" : 53 } { "birthWeek" : 49, "birthIsoWeek" : 49 } { "birthWeek" : 38, "birthIsoWeek" : 39 }