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

MongoDB $ concatArrays

    MongoDBでは、$concatArrays 集計パイプライン演算子は、2つ以上の配列を連結し、連結された配列を返します。

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

    { "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }

    $concatArraysを使用できます aの配列を連結する演算子 bの配列を含むフィールド フィールド:

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

    結果:

    { "result" : [ 1, 2, 3, 4, 5, 6 ] }

    空のアレイ

    配列を空の配列と連結しても何も変わりません。

    コレクションに次のドキュメントも含まれているとします。

    { "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }

    $concatArraysを適用してみましょう それに::

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

    結果:

    { "result" : [ 1, 2, 3 ] }

    最終的には変更なしの最初の配列になります。

    欠落しているフィールド

    フィールドを存在しないフィールドと連結しようとすると、nullが返されます。 。

    コレクションに次のドキュメントも含まれていると想像してください。

    { "_id" : 3, "a" : [ 1, 2, 3 ] }

    $concatArraysを適用すると次のようになります aに フィールドと存在しないフィールド:

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

    結果:

    { "result" : null }

    その他のデータ型

    $concatArraysに提供される各式 配列に解決される限り、任意の有効な式にすることができます。

    配列に解決されない場合は、エラーが返されます。

    次のドキュメントがあるとします。

    { "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }

    aを連結しようとするとどうなりますか。 およびb フィールド:

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

    結果:

    Error: command failed: {
    	"ok" : 0,
    	"errmsg" : "$concatArrays only supports arrays, not double",
    	"code" : 28664,
    	"codeName" : "Location28664"
    } : 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

    この例では、配列をdoubleで連結しようとしましたが、 $ concatArraysは配列のみをサポートし、doubleはサポートしないというエラーが発生しました。 。


    1. 転送中の暗号化を使用してAWSElastiCacheに接続する

    2. フィールド名ClassNameがmorphiaによってmongodbに挿入されています

    3. コマンドラインからHerokuがホストするRedisに安全に接続するにはどうすればよいですか?

    4. MongoDBBSONドキュメントサイズ制限を理解する