sql >> データベース >  >> NoSQL >> MongoDB

MongoDBで日付から秒を取得する5つの方法

    この記事では、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から秒の部分を返すためのさまざまなオプションを示しています。 それらのドキュメントのフィールド。

    $ second オペレーター

    $ second 演算子は、特定の日付の秒部分を含むドキュメントを返すように特別に設計されています。

    次のコードを実行して、 bornから秒の部分を返すことができます。 上記のドキュメントのフィールド。

    db.cats.aggregate(
      [
        {
          $project:
            {
              _id: 0,
              birthSecond: { $second: "$born" }
            }
        }
      ]
    )

    結果:

    { "birthSecond" : 15 }
    { "birthSecond" : 20 }
    { "birthSecond" : 1 }

    $ secondを使用するときにタイムゾーンを指定することもできます オペレーター。

    MongoDB $ secondを参照してください 詳細と例については。

    $ dateToString オペレーター

    $ dateToString 演算子は、ユーザー指定の形式に従って日付オブジェクトを文字列に変換します。したがって、ユーザーは、必要に応じて秒の部分だけが返されるように指定できます。

    日付部分ごとにフォーマット指定子があります。 %S format指定子は、2番目の部分(2桁、ゼロが埋め込まれている)を返します。

    例:

    db.cats.aggregate(
       [
         {
           $project: {
             _id: 0,
              birthSecond: { $dateToString: { format: "%S", date: "$born" } }
           }
         }
       ]
    )

    結果:

    { "birthSecond" : "15" }
    { "birthSecond" : "20" }
    { "birthSecond" : "01" }

    MongoDB $ dateToStringを参照してください 詳細と例については。

    $ dateToParts オペレーター

    $ dateToParts 演算子は、指定されたBSON日付値の構成部分を個別のプロパティとして含むドキュメントを返します。返されるプロパティはyearです 、 month day 時間 second およびmillisecond

    したがって、 $ dateToPartsを使用できます。 1つのパイプラインステージで、 secondを抽出する別のパイプラインステージを追加します 一部。

    $ 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
    	}
    }

    この結果は、パイプラインの次のステージに渡すことができるため、 secondだけを抽出できます。 次の段階のフィールド。

    secondだけに別のプロジェクションを追加するとどうなりますか。 フィールド:

    db.cats.aggregate(
      [
        {
          $project:
            {
              _id: 0,
              dateParts: { $dateToParts: { date: "$born" } }
            }
        },
        {
          $project:
            {
              birthSecond: "$dateParts.second"
            }
        }
      ]
    )

    結果:

    { "birthSecond" : 15 }
    { "birthSecond" : 20 }
    { "birthSecond" : 1 }

    したがって、 $ dateToPartsを使用するときはいつでも パイプラインでは、 secondにアクセスできます 次の段階のフィールド(およびその他の日付部分)。

    MongoDB $ dateToPartsを参照してください 詳細と例については。

    forEach() 方法

    cursor.forEach()を使用できます getSeconds()などのJavaScriptメソッドを使用して、カーソルを反復処理します またはgetUTCSeconds() 秒だけを返します。

    db.cats.find().forEach(
      function(c) {
        print(
          c.born.getUTCSeconds()
          );
      }
    );

    結果:

    15
    20
    1

    getUTCSeconds() JavaScriptメソッドは、世界時に従って指定された日付の秒を表す0〜59の整数を返します。

    getSeconds() メソッドは現地時間でそれを返します。

    また、前のオプションは名前と値のペアを含むドキュメント全体を返すのに対し、このオプションはドキュメント全体ではなく実際の秒値のみを返すことに気付くかもしれません。

    map() 方法

    cursor.map() メソッドは、カーソルがアクセスした各ドキュメントに関数を適用し、値を配列に結合します。

    例:

    db.cats.find().map(
      function(c) {
        c = c.born.getUTCSeconds();
        return c;
      }
    );

    結果:

    [ 15, 20, 1 ]

    1. 変数で動作するノードJSの正規表現を使用したMongoクエリ

    2. MongoDB-プロジェクションクエリ

    3. MongoDBデータベースの名前をどのように変更しますか?

    4. 追加の代わりにmongo$pushを追加することはできますか?