MongoDB $ kartoperatør

MongoDB $ kartoperatør
MongoDB er en populær NoSQL-dokumentorientert database som brukes til å lagre og spørre de store datamengdene. En av de kraftige egenskapene til MongoDB er muligheten til å bruke $ kartoperatøren i aggregeringsrørledninger for å transformere dokumentene i en samling. $ Kartoperatøren lar utviklerne bruke en spesifikk funksjon på hvert element i en matrise og returnerer de transformerte verdiene som en ny matrise. $ Kartoperatøren brukes i $ prosjektstadiet til en aggregeringsrørledning og tar to argumenter: inngangsuttrykket og "as" -uttrykket. Inngangsuttrykket er matrisen du vil transformere, og "AS" -uttrykket er funksjonen du vil bruke på hvert element i matrisen. $ Kartoperatøren returnerer en ny matrise med de transformerte verdiene. Vi starter med å vise tilgjengelige databaser i MongoDB.
Test> Vis DBS
Admin 40.00 KIB
Config 112.00 KIB
Lokal 72.00 KIB

Bruk databasen "Test" for å begynne å legge til noen data i en MongoDB -database, i.e. “Bruk test”.

Test> Bruk test
Allerede på DB -testen

Eksempel 1:

Her er et eksempel på å bruke $ kartoperatøren til å kvadratere hvert element i en matrise i en samling. Vi genererer en ny samling som heter "Info" i MongoDBs "Test" -database ved å kaste av CreateCollection -funksjonen til MongoDB. CreateCollection () -metoden returnerer et objekt med "OK" -egenskapen og en verdi på 1 som indikerer at samlingen er vellykket opprettet.

Test> DB.CreateCollection ("Info")
OK: 1

Etter at samlingen er generert, setter vi inn noen poster fra array-typen i den. Derfor støpes INSERTMANY -funksjonen her for å legge til tre poster, som hver inneholder "ARR" -feltet i en array -type med noen numeriske verdier.

Test> DB.Info.InsertMany ([id: 1, arr: [2, 4, 6], id: 2, arr: [3, 5, 7], id: 3, arr: []])
anerkjent: sant,
innsats:
'0': ObjectId ("63c4d968ac8011ecc27d7a35"),
'1': ObjectId ("63c4d968ac8011ecc27d7a36"),
'2': ObjectId ("63c4d968ac8011ecc27d7a37")

Etter vellykket innsetting av poster i "Info" -samlingen, kan du se på den ved å bruke "Finn" -funksjonen som vi brukte i følgende spørring:

Test> DB.Info.finne()
[
_id: ObjectId ("63c4d968ac80111ecc27d7a35"), id: 1, arr: [2, 4, 6],
_id: ObjectId ("63c4d968ac80111ecc27d7a36"), id: 2, arr: [3, 5, 7],
_id: ObjectId ("63c4d968ac80111ecc27d7a37"), id: 3, arr: []
]

I dette eksemplet brukes kartoperatøren til å legge til hvert element i "ARR" -arrayen for dokumentet for alle de tre postene. Innspillet til kartoperatøren er satt til “$ ARR” som refererer til “ARR” -arrayen i dokumentene til "Info" -samlingen. "As" -parameteren er satt til "n" som brukes som plassholder for hvert element i matrisen innenfor funksjonen. "IN" -parameteren inneholder funksjonen som i dette tilfellet er $ ADD -operatøren som oppdaterer hvert element i en "arr" -array ved å legge til 1. Utgangen fra denne operasjonen er en ny matrise med det oppdaterte antall elementer, men hvert element er summen av det opprinnelige elementet og "1" som vist i følgende utgang:

Test> DB.Info.Aggregate ([$ prosjekt: a: $ kart: input: "$ arr", som: "n", i: $ add: ["$$ n", 1]]))
[
_id: ObjectId ("63c4d968ac80111ecc27d7a35"), a: [3, 5, 7],
_id: ObjectId ("63c4d968ac80111ecc27d7a36"), a: [4, 6, 8],
_id: ObjectId ("63c4d968ac80111ecc27d7a37"), a: []
]

Eksempel 2:

La oss ha et annet eksempel på å bruke "kart" -operatøren av MongoDB. Fra og med denne illustrasjonen, bør du opprette en ny samling som heter "Info" i testdatabasen din. CreateCollection () -metoden brukes til å lage en ny samling i den nåværende databasen som er "Test". Siden vi allerede har opprettet den gjennom "CreateCollection" -metoden i databasen, hopper vi over det trinnet her.

Følgende spørring bruker MongoDB -kommandolinjegrensesnittet (CLI) for å sette inn flere dokumenter i en samling som heter “Data”. Hvert dokument representerer en by og dens avstand på miles til de andre stedene. Kommandoen bruker InsertMany () -metoden for å sette inn de tre dokumentene på en gang. Hvert dokument har et "by" -felt med en strengverdi og et "avstand" -felt med en rekke tall. InsertMany () -metoden returnerer et objekt med egenskapene "anerkjente" og "innsatser" som bekrefter at operasjonen er vellykket og gir de unike objektidene som er tilordnet hvert innsatt dokument.

Test> DB.Data.InsertMany (["City": "NewYork", "Distanse": [22.56, 66.7, 88.1],
... "City": "London", "Distanse": [77.76, 14.72, 11.56],
… "City": "Texas", "Distanse": [44.70, 64.99, 94.6]])

Anerkjent: sant,
innsats:
'0': ObjectId ("63c4e24cac8011ecc27d7a38"),
'1': ObjectId ("63c4e24cac8011ecc27d7a39"),
'2': ObjectId ("63c4e24cac8011ecc27d7a3a")

Denne spørringen brukes til å hente alle dokumenter fra en samling som heter "Data". Find () -metoden brukes med en tom spørring , noe som betyr at den returnerer alle dokumenter i samlingen. Utgangen er en rekke dokumenter som samsvarer med spørringen der hvert dokument har et "_id" -felt som er et unikt objektID tilordnet det, et "by" -felt med en strengverdi og et "avstand" -felt med en rekke tall. Denne spørringen viser alle dokumentene som ble satt inn.

Test> DB.Data.finne()
[
°.56, 66.7, 88.1 ] ,
_id: ObjectId ("63c4e24cac80111ecc27d7a39"), by: 'London', avstand: [77.76, 14.72, 11.56],
_id: ObjectId ("63c4e24cac80111ecc27d7a3a"), by: 'Texas', avstand: [44.7, 64.99, 94.6]
]

Følgende spørring bruker MongoDB “Test” -databasen for å utføre en samlet operasjon på “Data” -samlingen. Aggregate () -metoden brukes med en matrise som inneholder et enkelt rørledningstrinn som er $ prosjektstadiet. $ Prosjektfasen brukes til å omforme dokumentene i samlingen ved å spesifisere et nytt sett med felt. I dette tilfellet blir byfeltet ført gjennom og et nytt felt, “adj”, blir lagt til. Det nye feltet “Adj” er opprettet ved hjelp av $ Map -operatøren som bruker et spesifisert uttrykk for hvert element i en input -matrise og returnerer en utdata -matrise med samme antall elementer.

$ Map -operatøren tar tre argumenter: Inngangsarrayen som er "$ avstand", et variabelt navn for det gjeldende elementet i inngangsarrayen som er "DC", og et uttrykk som brukes på hvert element i inngangsarrayen. I dette tilfellet er uttrykket å avkort desimalverdien av avstanden ved bruk av $ trunc -operatøren. Resultatet er en rekke dokumenter med samme struktur som originaldokumentene, men med et ekstra "adj" -felt som inneholder en rekke heltall som er avkortet fra "avstand" -feltet.

Test> DB.Data.Aggregate ([$ Project: City: "$ City", adj:
... $ kart: input: "$ distanse", som: "dc", i: $ trunc: "$$ dc"]))
[
_id: ObjectId ("63c4e24cac80111ecc27d7a38"), by: 'newYork', adj: [22, 66, 88],
_id: ObjectId ("63c4e24cac80111ecc27d7a39"), by: 'London', adj: [77, 14, 11],
_id: ObjectId ("63c4e24cac80111ecc27d7a3a"), by: 'Texas', adj: [44, 64, 94]
]

Konklusjon

Denne guiden utdyper bruken av "kart" -operatøren i MongoDB veldig tydelig i introduksjonen. For å støtte forklaringen som vi ga i introduksjonen, forklarte vi to relaterte eksempler i denne artikkelen. Når du går gjennom disse eksemplene, kan du legge til en verdi til et matriseelement i et bestemt dokument og kan avkalle desimalpunktene fra spesifikke matriseelementer. Avslutningsvis er MongoDBs $ kartoperatør en kraftig funksjon som lar utviklerne transformere matriser av dokumenter i en samling. Det er enkelt å bruke og kan brukes i kombinasjon med de andre aggregeringsoperatørene for å utføre mer komplekse transformasjoner. Med $ kart kan utviklerne enkelt manipulere dataene og gjøre det mer nyttig for applikasjonene deres.