sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $concatArrays

I MongoDB er $concatArrays aggregeringspipeline-operatør sammenkæder to eller flere arrays og returnerer det sammenkædede array.

Eksempel

Antag, at vi har en samling kaldet data med følgende dokument:

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

Vi kan bruge $concatArrays operator til at sammenkæde arrayet af a felt med arrayet af b felt:

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

Resultat:

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

Tomme arrays

Sammenkædning af et array med et tomt array ændrer ikke noget.

Antag, at vores samling også indeholder følgende dokument:

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

Lad os anvende $concatArrays til det::

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

Resultat:

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

Vi ender med det første array uden ændringer.

Manglende felter

Forsøger du at sammenkæde et felt med et felt, der ikke eksisterer, returneres null .

Forestil dig, at vores samling også indeholder følgende dokument:

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

Her er, hvad der sker, når vi anvender $concatArrays til a felt og et ikke-eksisterende felt:

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

Resultat:

{ "result" : null }

Andre datatyper

Hvert udtryk leveres til $concatArrays kan være et hvilket som helst gyldigt udtryk, så længe det løses til et array.

Hvis det ikke løses til et array, returneres en fejl.

Antag, at vi har følgende dokument:

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

Her er, hvad der sker, hvis vi forsøger at sammenkæde a og b felter:

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 dette eksempel forsøgte jeg at sammenkæde et array med en dobbelt, men jeg fik en fejl, der siger $concatArrays understøtter kun arrays, ikke dobbelt .


  1. Filtrer med regex MongoDB C#-driver

  2. Fjern dubletter, når du bruger $unionWith i MongoDB

  3. Oprettelse og administration af flere forbindelser i Redis Python

  4. hvordan man konfigurerer timeout for JedisConnectionFactory-basen på fjederstøvleramme