sql >> Database >  >> NoSQL >> MongoDB

MongoDB $concatArrays

In MongoDB, de $concatArrays aggregatiepijplijnoperator voegt twee of meer arrays samen en retourneert de aaneengeschakelde array.

Voorbeeld

Stel dat we een verzameling hebben met de naam data met het volgende document:

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

We kunnen de $concatArrays . gebruiken operator om de array van de a . samen te voegen veld met de array van de b veld:

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

Resultaat:

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

Lege arrays

Het aaneenschakelen van een array met een lege array verandert niets.

Stel dat onze collectie ook het volgende document bevat:

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

Laten we $concatArrays toepassen naar dat::

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

Resultaat:

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

We eindigen met de eerste array zonder enige wijzigingen.

Ontbrekende velden

Proberen een veld samen te voegen met een veld dat niet bestaat, retourneert null .

Stel je voor dat onze collectie ook het volgende document bevat:

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

Dit is wat er gebeurt als we $concatArrays toepassen naar de a veld en een niet-bestaand veld:

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

Resultaat:

{ "result" : null }

Andere gegevenstypen

Elke uitdrukking die wordt verstrekt aan $concatArrays kan elke geldige uitdrukking zijn, zolang deze maar wordt omgezet in een array.

Als het niet wordt opgelost in een array, wordt er een fout geretourneerd.

Stel dat we het volgende document hebben:

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

Dit is wat er gebeurt als we proberen de a . samen te voegen en b velden:

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

Resultaat:

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

In dit voorbeeld heb ik geprobeerd een array samen te voegen met een double, maar ik kreeg een foutmelding dat $concatArrays alleen arrays ondersteunt, niet double .


  1. MongoDB $avg Aggregation Pipeline Operator

  2. Zoek met behulp van _id werkt niet met aggregatie

  3. Mongodb Explain voor aggregatieraamwerk

  4. Redis™-gegevens migreren met Redis-Shake