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

MongoDB $ add

    MongoDBでは、$add 集約パイプライン演算子は、値を加算します。このような値は数値にすることも、数値と日付にすることもできます。

    $add 演算子は値を引数として受け入れます。引数は、すべての数値または数値と日付のいずれかに解決される限り、任意の有効な式にすることができます。

    サンプルデータ

    dataというコレクションがあるとします。 次のドキュメントを使用:

    {
    	"_id" : 1,
    	"a" : 100,
    	"b" : 50,
    	"c" : ISODate("2021-01-03T23:30:15.100Z")
    }
    {
    	"_id" : 2,
    	"a" : 20000,
    	"b" : 15,
    	"c" : ISODate("2019-12-08T04:00:20.112Z")
    }
    {
    	"_id" : 3,
    	"a" : 1700,
    	"b" : 3,
    	"c" : ISODate("2020-09-24T10:45:01.007Z")
    }

    番号を追加

    $addを使用できます aを追加する演算子 およびb 一緒にフィールド。

    例:

    db.data.aggregate(
       [
         { $project: { 
           _id: 0,
           a: 1, 
           b: 1, 
           result: { 
             $add: [ "$a", "$b" ] } } 
             }
       ]
    )

    結果:

    { "a" : 100, "b" : 50, "result" : 150 }
    { "a" : 20000, "b" : 15, "result" : 20015 }
    { "a" : 1700, "b" : 3, "result" : 1703 }

    日付付きの番号を追加

    引数の1つが日付の場合、他の引数はミリ秒として扱われ、日付に追加されます。

    例:

    db.data.aggregate(
       [
         { $project: { 
           _id: 0,
           a: 1, 
           c: 1, 
           result: { 
             $add: [ "$a", "$c" ] } } 
             }
       ]
    ).pretty()

    結果:

    {
    	"a" : 100,
    	"c" : ISODate("2021-01-03T23:30:15.100Z"),
    	"result" : ISODate("2021-01-03T23:30:15.200Z")
    }
    {
    	"a" : 20000,
    	"c" : ISODate("2019-12-08T04:00:20.112Z"),
    	"result" : ISODate("2019-12-08T04:00:40.112Z")
    }
    {
    	"a" : 1700,
    	"c" : ISODate("2020-09-24T10:45:01.007Z"),
    	"result" : ISODate("2020-09-24T10:45:02.707Z")
    }

    aの数値がわかります cにミリ秒単位でフィールドが追加されました フィールド。

    その他の引数

    前の例では2つの値を一緒に追加していますが、必要に応じてさらに追加できます。

    3つのフィールドすべてを一緒に追加する例を次に示します。

    db.data.aggregate(
       [
         { $project: { 
           _id: 0,
           a: 1, 
           b: 1,
           c: 1, 
           result: { 
             $add: [ "$a", "$b", "$c" ] } } 
             }
       ]
    ).pretty()

    結果:

    {
    	"a" : 100,
    	"b" : 50,
    	"c" : ISODate("2021-01-03T23:30:15.100Z"),
    	"result" : ISODate("2021-01-03T23:30:15.250Z")
    }
    {
    	"a" : 20000,
    	"b" : 15,
    	"c" : ISODate("2019-12-08T04:00:20.112Z"),
    	"result" : ISODate("2019-12-08T04:00:40.127Z")
    }
    {
    	"a" : 1700,
    	"b" : 3,
    	"c" : ISODate("2020-09-24T10:45:01.007Z"),
    	"result" : ISODate("2020-09-24T10:45:02.710Z")
    }

    今回は、両方の数字が日付に追加されました。

    許可される日付は1つだけです

    多くの式を一緒に追加できますが、含めることができる日付は1つだけです。複数の日付を渡すとエラーが発生します。

    例:

    db.data.aggregate(
       [
         { $project: { 
           _id: 0,
           a: 1, 
           b: 1,
           c: 1, 
           result: { 
             $add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } } 
             }
       ]
    ).pretty()

    結果:

    uncaught exception: Error: command failed: {
    	"ok" : 0,
    	"errmsg" : "only one date allowed in an $add expression",
    	"code" : 16612,
    	"codeName" : "Location16612"
    } : aggregate failed :
    [email protected]/mongo/shell/utils.js:25:13
    [email protected]/mongo/shell/assert.js:18:14
    [email protected]/mongo/shell/assert.js:618:17
    [email protected]/mongo/shell/assert.js:708:16
    [email protected]/mongo/shell/db.js:266:5
    [email protected]/mongo/shell/collection.js:1046:12
    @(shell):1:1

    引数を渡さない

    $addに引数を渡さない 結果は0 返送されます。

    例:

    db.data.aggregate(
       [
         { $project: { 
           result: { 
             $add: [  ] } } 
             }
       ]
    )

    結果:

    { "_id" : 1, "result" : 0 }
    { "_id" : 2, "result" : 0 }
    { "_id" : 3, "result" : 0 }

    ヌル値の受け渡し

    nullを渡す 結果はnull

    例:

    db.data.aggregate(
       [
         { $project: { 
           result: { 
             $add: [ null ] } } 
             }
       ]
    )

    結果:

    { "_id" : 1, "result" : null }
    { "_id" : 2, "result" : null }
    { "_id" : 3, "result" : null }


    1. ARMテンプレート出力を介してRedisprimaryKeyを返す方法は?

    2. HDFSの上位6つの機能–HadoopHDFSチュートリアル

    3. MongoDBでコレクションに名前を付けるための規則はありますか?

    4. Scalaから使用するためのRedisクライアントライブラリの推奨事項