この記事では、MongoDBのDateオブジェクトからミリ秒の部分を返す5つの方法を紹介します。
サンプルデータ
catsというコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }
次の例は、 bornからミリ秒の部分を返すためのさまざまなオプションを示しています。 それらのドキュメントのフィールド。
$ millisecond オペレーター
$ millisecond 演算子は、特定の日付のミリ秒部分を含むドキュメントを返すように特別に設計されています。
次のコードを実行して、 bornからミリ秒の部分を返すことができます。 上記のドキュメントのフィールド。
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMillisecond: { $millisecond: "$born" }
}
}
]
) 結果:
{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }
$ millisecond 演算子はtimezoneも受け入れます 口論。
MongoDB $ millisecondを参照してください 詳細と例については。
$ dateToString オペレーター
$ dateToString 演算子は、ユーザー指定の形式に従って日付オブジェクトを文字列に変換します。したがって、ユーザーは、必要に応じてミリ秒部分のみが返されるように指定できます。
日付部分ごとにフォーマット指定子があります。 %L format指定子は、ミリ秒部分(3桁、ゼロが埋め込まれている)を返します。
例:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
}
}
]
) 結果:
{ "birthMillisecond" : "123" }
{ "birthMillisecond" : "112" }
{ "birthMillisecond" : "007" }
MongoDB $ dateToStringを参照してください 詳細と例については。
$ dateToParts オペレーター
$ dateToParts 演算子は、指定されたBSON日付値の構成要素を個別のプロパティとして含むドキュメントを返します。返されるプロパティはyearです 、 month 、 day 、時間 、分コード> 、 second およびmillisecond 。
したがって、 $ dateToPartsを使用できます。 1つのパイプラインステージで、ミリ秒を抽出する別のパイプラインステージを追加します 一部。
$ dateToPartsは次のとおりです 3つのドキュメントの返品:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty() 結果:
{
"dateParts" : {
"year" : 2021,
"month" : 1,
"day" : 3,
"hour" : 23,
"minute" : 30,
"second" : 15,
"millisecond" : 123
}
}
{
"dateParts" : {
"year" : 2019,
"month" : 12,
"day" : 8,
"hour" : 4,
"minute" : 0,
"second" : 20,
"millisecond" : 112
}
}
{
"dateParts" : {
"year" : 2020,
"month" : 9,
"day" : 24,
"hour" : 10,
"minute" : 45,
"second" : 1,
"millisecond" : 7
}
}
この結果は、パイプラインの次のステージに渡すことができるため、ミリ秒だけを抽出できます。 次の段階のフィールド。
ミリ秒だけに別のプロジェクションを追加するとどうなりますか? フィールド:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMillisecond: "$dateParts.millisecond"
}
}
]
) 結果:
{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }
したがって、 $ dateToPartsを使用するときはいつでも パイプラインでは、ミリ秒にアクセスできます。 次の段階のフィールド(およびその他の日付部分)。
MongoDB $ dateToPartsを参照してください 詳細と例については。
forEach() 方法
cursor.forEach()を使用できます getMilliseconds()などのJavaScriptメソッドを使用して、カーソルを反復処理します またはgetUTCMilliseconds() ミリ秒だけを返します。
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMilliseconds()
);
}
); 結果:
123 112 7
getUTCSeconds() JavaScriptメソッドは、指定された日付オブジェクトのミリ秒部分を表す0〜999の整数を返します。
getMilliseconds() メソッドは現地時間でそれを返します。
また、前のオプションは名前と値のペアを含むドキュメント全体を返すのに対し、このオプションはドキュメント全体ではなく実際のミリ秒値のみを返すことに気付くかもしれません。
map() 方法
cursor.map() メソッドは、カーソルがアクセスした各ドキュメントに関数を適用し、値を配列に結合します。
例:
db.cats.find().map(
function(c) {
c = c.born.getUTCMilliseconds();
return c;
}
); 結果:
[ 123, 112, 7 ]