sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $concatArrays

I MongoDB, $concatArrays aggregeringspipeline-operatör sammanfogar två eller flera matriser och returnerar den sammanlänkade matrisen.

Exempel

Anta att vi har en samling som heter data med följande dokument:

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

Vi kan använda $concatArrays operatorn för att sammanfoga arrayen för a fältet med arrayen för b fält:

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

Resultat:

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

Tömma arrayer

Att sammanfoga en array med en tom array förändrar ingenting.

Anta att vår samling också innehåller följande dokument:

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

Låt oss tillämpa $concatArrays till det::

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

Resultat:

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

Vi slutar med den första arrayen utan några ändringar.

Fält saknas

Om du försöker sammanfoga ett fält med ett fält som inte finns returneras null .

Föreställ dig att vår samling också innehåller följande dokument:

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

Här är vad som händer när vi använder $concatArrays till a fält och ett icke-existerande fält:

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

Resultat:

{ "result" : null }

Andra datatyper

Varje uttryck tillhandahålls till $concatArrays kan vara vilket giltigt uttryck som helst, så länge det löser sig till en array.

Om det inte löser sig till en array, returneras ett fel.

Anta att vi har följande dokument:

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

Här är vad som händer om vi försöker sammanfoga a och b fält:

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

Resultat:

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

I det här exemplet försökte jag sammanfoga en array med en dubbel men jag fick ett felmeddelande som säger att $concatArrays endast stöder arrayer, inte dubbel .


  1. Effektivt sätt gör om inställningen medlemsuppdatering

  2. Det går inte att ladda partialer på servern JS

  3. mongoexport utan _id-fält

  4. Stänger av Redis