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

Sådan udføres grundlæggende forespørgselsoperationer i MongoDB

I denne artikel vil vi behandle, hvordan man udfører grundlæggende forespørgselsoperationer i MongoDB. Vi producerer data i et tempo uden sidestykke nu efter den globale udbredelse af internettet. Da det vil kræve, at vi indsamler/anmoder om de nødvendige data fra databasen for at udføre en form for analyse, er det yderst vigtigt, at vi vælger det rigtige værktøj til at forespørge dataene.

Det er her MongoDB kommer ind, specifikt. MongoDB er en ustruktureret database, som i form af dokumenter gemmer data. Derudover er MongoDB meget effektiv til at håndtere enorme mængder data og er den mest brugte NoSQL-database, da den giver et rigt forespørgselssprog og alsidig og nem dataadgang.

Opret en prøvedatabase

Før starten vil vi oprette en prøve-DB med nogle eksempeldata for at udføre alle operationer.

Vi vil oprette en database med navnet myDB og vil oprette en samling med navn ordrer . Til dette vil erklæringen være som følger.

> use myDB
> db.createCollection("orders")
>

MongoDB bruger ikke rækkerne og kolonnerne. Det gemmer dataene i et dokumentformat. En samling er en gruppe af dokumenter.

Du kan kontrollere alle samlinger i en database ved at bruge følgende sætning.

> use myDB
>show collections
orders
system.indexes
>

Lad os indsætte nogle dokumenter ved at bruge følgende sætning.

> db.orders.insert([
	{
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 1000.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"},
		PaymentMode":"Cash",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		Customer: "ron",
		Address:{"City":"New York","Country":"USA"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]		
	}
])

Et dokument svarer til en RDBMS-række. Det behøver ikke at have det samme skema i hvert dokument. Det betyder, at et dokument muligvis ikke har et felt, der ikke har nogen værdi.

Forespørgselsdokumenter

find() metode

Du skal bruge metoden find() til at forespørge dokumenter fra MongoDB-samlinger. Følgende erklæring vil hente alle dokumenter fra samlingen.

> db.orders.find()
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 1000.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"},
		PaymentMode":"Cash",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		Address:{"City":"New York","Country":"USA"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 600.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]
	}
>

Projektion

Hvis du kun vil hente udvalgte felter, kan du bruge projektionen. Følgende erklæring henter kun Kunde og E-mail felt.

> db.orders.find( { }, { Customer: 1, Email: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Email:"[email protected]"
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz"		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		Email:"[email protected]"		
	}
>

Filtrer dokumenterne ved at angive en betingelse

Nu vil vi lære, hvordan vi kan hente de dokumenter, der matcher en specificeret betingelse. MongoDB tilbyder mange sammenligningsoperatører til dette.

1. $eq-operatør

$eq-operatoren kontrollerer ligheden mellem feltværdien og den angivne værdi. For at hente ordren, hvor PaymentMode er 'Kort' kan du bruge følgende erklæring

>db.orders.find( { PaymentMode: { $eq: "Card" } } )

Denne forespørgsel kan også skrives som nedenfor

>db.orders.find( { PaymentMode: "Card" } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE PaymentMode="Card"

Eksempel

>db.orders.find( { PaymentMode: "Card" }, { Customer: 1, PaymentMode: 1 } )
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		PaymentMode":"Card"				
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		PaymentMode":"Card"
	}
>

$eq Operator med indlejret dokument

Du har måske bemærket, at vi har indsat et indlejret dokument Adresse i Ordrer kollektion. Hvis du ønsker at hente ordren hvor Land er 'Indien', kan du bruge en priknotation som følgende udsagn.

>db.Orders.find( { "Address.Country": { $eq: "India" } } )

Denne forespørgsel kan også skrives som nedenfor

>db.Orders.find( { "Address.Country":"India" } )

Eksempel

>db.Orders.find( { "Address.Country": { $eq: "India" } } , { Customer: 1, Address: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"}
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"}
	}
>

$eq Operator med matrix

$eq-operatoren vil hente alle dokumenterne, hvis den angivne betingelse er sand for ethvert element i et array. Vi har en OrderItems array i dokumentet. Hvis du vil filtrere de dokumenter, hvor 'papir' også blev bestilt, ville erklæringen være som følger.

>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } )

Denne forespørgsel kan også skrives som nedenfor

>db.Orders.find( { "OrderItems.ItemName": "paper"  } )

Eksempel

>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	}
>

2. $gt Operatør

Du kan bruge $gt-operatoren til at hente de dokumenter, hvor et felts værdi er større end den angivne værdi. Følgende erklæring vil hente de dokumenter, hvor OrderTotal er større end 800.

>db.orders.find( { OrderTotal: { $gt: 800.00 } } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE OrderTotal>800.00

Eksempel

>db.Orders.find( { "OrderTotal": { $gt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderTotal: 1000.00
	}
>

3. $gte Operatør

Du kan bruge operatoren $gte til at hente de dokumenter, hvor et felts værdi er større end eller lig med den angivne værdi. Følgende erklæring vil hente de dokumenter, hvor OrderTotal er større end eller lig med 800.

>db.orders.find( { OrderTotal: { $gte: 800.00 } } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE OrderTotal>=800.00

Eksempel

>db.Orders.find( { "OrderTotal": { $gte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderTotal: 1000.00
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderTotal: 800.00
	}
>

4. $lt Operatør

Du kan bruge operatoren $lt til at hente de dokumenter, hvor et felts værdi er mindre end den angivne værdi. Følgende erklæring vil hente de dokumenter, hvor OrderTotal er mindre end 800.

>db.orders.find( { OrderTotal: { $lt: 800.00 } } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE OrderTotal<800.00

Eksempel

>db.Orders.find( { "OrderTotal": { $lt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderTotal: 600.00
	}
>

4. $lte-operatør

Du kan bruge $lte-operatoren til at hente de dokumenter, hvor et felts værdi er mindre end eller lig med den angivne værdi. Følgende erklæring vil hente de dokumenter, hvor OrderTotal er mindre end eller lig med 800.

>db.orders.find( { OrderTotal: { $lte: 800.00 } } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE OrderTotal<=800.00

Eksempel

>db.Orders.find( { "OrderTotal": { $lte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderTotal: 800.00
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderTotal: 600.00
	}
>

5. $ne Operatør

Du kan bruge operatoren $ne til at hente de dokumenter, hvor et felts værdi ikke er lig med den angivne værdi.

>db.orders.find( { PaymentMode: { $ne: "Card" } } )

En lignende SQL-sætning ville være som følger

SELECT * FROM orders WHERE PaymentMode != "Card"

Eksempel

>db.Orders.find( { "PaymentMode": { $ne: "Card" } } , { Customer: 1, PaymentMode: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		PaymentMode":"Cash"
	}
>

6. $in Operatør

Du kan bruge operatoren $in til at hente de dokumenter, hvor et felts værdi er lig med en hvilken som helst værdi i det angivne array.

>db.orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } )

Eksempel

>db.Orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	}
>

7. $nin Operatør

Du kan bruge $nin-operatoren til at hente de dokumenter, hvor et felts værdi ikke er lig med nogen værdi i det angivne array. Det vil også vælge de dokumenter, hvor feltet ikke findes.

>db.orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } )

Eksempel

>db.Orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]
	}
>

Indeksering

Vi ved, at indeksering er meget vigtig, hvis vi udfører forespørgslerne på en stor database. Uden indeksering kan udførelse af en forespørgsel være dyr. Vi kan tilføje et simpelt stigende indeks på et enkelt felt ved at bruge følgende sætning.

>db.Orders.createIndex({"Customer":1})

MongoDB opretter som standard et unikt indeks på '_id'-feltet. Et unikt indeks forhindrer indsættelse af to dokumenter med samme værdi for det pågældende felt. Hvis du vil oprette et unikt indeks, vil erklæringen være som følger.

db.Orders.createIndex( { "OrderId": 1 }, { unique: true } )

Konklusion

Jeg håber, du har lært noget nyt i dag, hvis du vil lære lidt flere ting på MongoDB, her er en interessant artikel om Self-Hosted MongoDB. Jeg inviterer dig også til at prøve ting på egen hånd og dele din oplevelse i kommentarfeltet. Desuden, hvis du står over for problemer med nogen af ​​ovenstående definitioner, er du velkommen til at spørge mig i kommentarerne nedenfor.


  1. Sådan implementeres Redis Multi-Exec ved at bruge Spring-data-Redis

  2. redis Det ser ud til, at serveren har lukket forbindelsen

  3. installer mongoDB (underordnet proces mislykkedes, afsluttet med fejlnummer 100)

  4. Hvordan fungerer sortering med et indeks i MongoDB?