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:47Z") }
    { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:00Z") }

    次の例は、 bornから議事録部分を返すためのさまざまなオプションを示しています。 それらのドキュメントのフィールド。

    $ minutes オペレーター

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

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

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

    結果:

    { "birthMinute" : 30 }
    { "birthMinute" : 0 }
    { "birthMinute" : 45 }

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

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

    $ dateToString オペレーター

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

    日付部分ごとにフォーマット指定子があります。 %M format指定子は、分部分を返します。

    例:

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

    結果:

    { "birthMinute" : "30" }
    { "birthMinute" : "00" }
    { "birthMinute" : "45" }

    %Zを使用することもできます UTCからの分オフセットを数値として返します。

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

    $ dateToParts オペレーター

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

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

    $ 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" : 47,
    		"millisecond" : 0
    	}
    }
    {
    	"dateParts" : {
    		"year" : 2020,
    		"month" : 9,
    		"day" : 24,
    		"hour" : 10,
    		"minute" : 45,
    		"second" : 0,
    		"millisecond" : 0
    	}
    }

    この結果をパイプラインの次のステージに渡して、minuteだけを抽出できます。 フィールド。

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

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

    結果:

    { "birthMinute" : 30 }
    { "birthMinute" : 0 }
    { "birthMinute" : 45 }

    したがって、 $ dateToPartsを使用する場合 パイプラインで、 minutesにアクセスできるようになります 次の段階のフィールド(および他のすべてのフィールド)。

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

    forEach() 方法

    cursor.forEach()を使用できます getMinutes()などのJavaScriptメソッドを使用して、カーソルを反復処理します またはgetUTCMinutes() ほんの数分を返すために。

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

    結果:

    30
    0
    45

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

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

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

    map() 方法

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

    例:

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

    結果:

    [ 30, 0, 45 ]

    1. node.jsでのredisの使用(エクスプレス)

    2. マングースでコレクションの要素を見つけて数える

    3. MongoDBインデックスビルド–ユーザーが新しいビルドをトリガーできないようにする

    4. redisのlaravelキューにあるすべての保留中のジョブを取得するにはどうすればよいですか?