DynamoDB -filter uttrykk alt du trenger å vite

DynamoDB -filter uttrykk alt du trenger å vite
Filteruttrykk brukes i NO-SQL DynamoDB-funksjonen som der klausuler som er vanlige i SQL-databaser. Siden DynamoDB er en NO-SQL-database, oppfører filteruttrykk seg ganske annerledes enn der klausuler på grunn av arten og strukturen til NO-SQL-databaser.

Denne artikkelen fokuserer på filteruttrykk. Derfor vil vi definere filteruttrykkene, forklare hvorfor og når de er aktuelle, og gi en trinn-for-trinns guide for hvordan du bruker dem gjennom relevante eksempler.

Hva er filteruttrykk?

Filteruttrykk er en populær teknikk for å filtrere dataene i DynamoDB under spørring og skanneoperasjoner. I DynamoDB er riktig datamodellering og organisering avhengig av filtrering. Mens de fleste applikasjoner alltid har mange lagrede data, kan du raskt trenge et element fra det store rotet.

Din evne til å hente riktige data når du trenger det, avhenger av filtreringsfunksjonene til databasen din, og det er her filteruttrykkene hjelper. De spesifiserer resultatene i spørringselementet du vil bli returnert til deg når de kasserer resten av varene.

Du kan bruke filteruttrykkene på filtre på serversiden på elementattributtene etter at en spørringsoperasjon er ferdig, men før serveren bringer tilbake resultatene av spørringssamtalen. Dette innebærer at spørringen din fortsatt bruker samme mengde lesekapasitet, uavhengig av om du bruker et filteruttrykk.

Dessuten, som ordinære spørringsoperasjoner, skjer din 1 MB datastrense for spørringsoperasjoner før evalueringen av filteruttrykksoperasjonen din. Du kan bruke denne operasjonen til å redusere nyttelasten, søke etter spesifikke elementer og forbedre enkelheten og lesbarheten under applikasjonsutvikling.

Filteruttrykkssyntaks og eksempler

Spesielt bruker både filteruttrykk og nøkkeluttrykk samme syntaks. Dessuten kan filteruttrykk og tilstandsuttrykk også bruke de samme funksjonene, komparatorene og logiske operatører.

De andre operatørene som filtrerer uttrykkene kan bruke, inkluderer også operatøren, OR-operatøren, ikke-Equals () -operatøren, i operatøren, mellom operatøren, BEGINS_-med operatøren, størrelsesoperatøren og den eksisterer operatøren.

Eksempel 1: Spørring ved hjelp av AWS CLI og DynamoDB primærnøkler

Dette eksemplet spør om musikkbordet for en bestemt sjanger (Partition Key) og en spesifikk kunstner (sort nøkkel). Verktøyet bringer bare et resultat for varene som samsvarer med den spesielle partisjonstasten og sorteringsnøkkelen for sangene med flest visninger.

Du kan spesifisere antall visninger (#V) i kommandoen. For eksempel merker vi vår minimumsgrense til 1000 visninger for å antyde at bare resultatene for sangene med over 1000 visninger vil komme tilbake.

$ aws dynamoDB spørring \
--Bordnavn Musikk \
--Key-condition-expression "sjanger =: fn og artist =: sub" \
--filteruttrykk "#v> =: num (1000)" \
--Expression-Attribute-Names '"#V": "Visninger"' \
--Expression-Attribute-Values ​​File: // Verdier.JSON

Eksempel 2: Bruke AWS CLI med tilstandsuttrykk

Vi kan restrukturere det samme spørringen som i forrige eksempel, men nå med tilstandstaster sammen med filtrene våre. Det inkluderer ikke sortertasten. I stedet henter den alle postene for den spesifiserte artisten med mer enn 1000 visninger. Det kan også rekonstrueres for å gi bestillinger over et gitt nummer for et bestemt brukernavn (Customer_id).

$ aws dynamoDB spørring \
--Bordnavn Musikk \
--Key-condition-expression "brukernavn =: brukernavn" \
--filteruttrykk "Beløp>: beløp" \
--Expression-Attribute-Values ​​'
": brukernavn": "s": "artist",
": beløp": "n": "1000"
'\
$ Lokal

Et eksempel på resultatet ser slik ut:

Den gitte illustrasjonen viser at av de 56 sangtitlene for den samme artisten, har bare syv sanger mer enn 1000 visninger. Vi har imidlertid avkortet figuren for kortfattethet og inkluderte bare det første og siste resultatet på listen.

Eksempel 3: Bruke filteruttrykk med operatøren uten lik ()

I det følgende Java -verktøyet ønsker vi å spørre om bordet vårt (filmsamling) for alle filmer som ikke tilsvarer “Movie X”. Forsikre deg om at du bruker et filteruttrykk med et attributt (#Name) sammen med en ekspresjonsattributtverdi (: Navn) som illustrert i følgende:

const aws = krever ("aws-sdk");
Aws.konfigurasjon.oppdatering (region: "EU-West-1");
const dynamodb = nye AWS.Dynamodb.DocumentClient ();
var params =
Tablename: 'Movie Collection',
KeyConditionExpression: '#pk =: pk',
FilterExpression: "#Name: Name", (Filter Expression)
ExpressionAttributeNames: "#pk": "pk", "#name": "name", (tilstandsuttrykk)
ExpressionAttributeValues:
': Pk': 'ogejhhrdrs453hgd4ht44',
': navn': "Movie X"

;
Dynamodb.spørring (parametere, funksjon (feil, data)
hvis (feil) konsoll.logg (feil);
annet konsoll.logg (data);
);

Eksempel 4: Bruke filteruttrykk med skanneoperatøren

Mens den forrige kommandoen bruker for å hente bare de elementene som ikke er lik filmnavnet som heter Movie X, må du sørge for at du bruker viktige tilstandsuttrykkene her sammen med filteruttrykket. Dette er fordi det er umulig å filtrere dataene i spørringsoperatøren uten å bruke et nøkkelbetingelsesuttrykk.

var params =
Tablename: 'Movie Collection',
FilterExpression: "PK =: PK og #Name: Navn",
ExpressionAttributeNames: "#name": "name",
ExpressionAttributeValues:
': Pk': 'ogejhhrdrs453hgd4ht44',
': navn': "Movie X"

;
Dynamodb.skanning (parametere, funksjon (feil, data)
hvis (feil) konsoll.logg (feil);
annet konsoll.logg (data);
);

Konklusjon

Det er slutten på vår dynamoDB -opplæring om filteruttrykk. Du kan bruke filteruttrykkene til å hente et sett med foretrukne data, filtrere hentede data etter en skanning eller spørring, eller returnere et sett med data til en klient. Selv om det er aktuelt med en rekke verktøy, er det tilfeller når du bruker filteruttrykkene ikke er levedyktig. For eksempel kan du bare bruke dem hvis du har en riktig datamodell, når du bruker en primærnøkkel, og når du henter ut store deler av data.