MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wykonywać podstawowe operacje na zapytaniach w MongoDB

W tym artykule zajmiemy się wykonywaniem podstawowych operacji zapytań w MongoDB. Obecnie, dzięki globalnemu rozprzestrzenianiu się Internetu, produkujemy dane w niezrównanym tempie. Ponieważ będzie to wymagało od nas zebrania / zażądania wymaganych danych z bazy danych w celu przeprowadzenia pewnego rodzaju analizy, niezwykle ważne jest, abyśmy wybrali odpowiednie narzędzie do wyszukiwania danych.

Tu właśnie pojawia się MongoDB. MongoDB to nieustrukturyzowana baza danych, która w postaci dokumentów przechowuje dane. Ponadto MongoDB jest bardzo skuteczny w obsłudze ogromnych ilości danych i jest najczęściej używaną bazą danych NoSQL, ponieważ zapewnia bogaty język zapytań oraz wszechstronny i łatwy dostęp do danych.

Utwórz przykładową bazę danych

Przed rozpoczęciem utworzymy przykładową bazę danych z przykładowymi danymi do wykonania wszystkich operacji.

Stworzymy bazę danych o nazwie myDB i utworzy kolekcję o nazwie zamówienia . W tym celu oświadczenie byłoby następujące.

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

MongoDB nie używa wierszy i kolumn. Przechowuje dane w formacie dokumentu. Kolekcja to grupa dokumentów.

Możesz sprawdzić wszystkie kolekcje w bazie danych, używając następującej instrukcji.

> use myDB
>show collections
orders
system.indexes
>

Wstawmy kilka dokumentów, korzystając z poniższej instrukcji.

> 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}
		]		
	}
])

Dokument jest odpowiednikiem wiersza RDBMS. Nie musi mieć tego samego schematu w każdym dokumencie. Oznacza to, że dokument może nie mieć żadnego pola, które nie ma żadnej wartości.

Dokumenty zapytań

metoda znajdź()

Musisz użyć metody find() do tworzenia zapytań o dokumenty z kolekcji MongoDB. Poniższa instrukcja pobierze wszystkie dokumenty z kolekcji.

> 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}
		]
	}
>

Projekcja

Jeśli chcesz pobrać tylko wybrane pola, możesz użyć projekcji. Poniższe oświadczenie spowoduje pobranie tylko Klienta i e-mail pole.

> 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]"		
	}
>

Filtruj dokumenty, określając warunek

Teraz dowiemy się, jak możemy pobrać dokumenty spełniające określony warunek. MongoDB udostępnia w tym celu wiele operatorów porównania.

1. Operator $eq

Operator $eq sprawdza równość wartości pola z określoną wartością. Aby pobrać zamówienie, w którym PaymentMode to „Karta”, możesz użyć następującego oświadczenia

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

To zapytanie można również napisać jak poniżej

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE PaymentMode="Card"

Przykład

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

Operator $eq z osadzonym dokumentem

Być może zauważyłeś, że wstawiliśmy osadzony dokument Adres w Zamówieniach kolekcja. Jeśli chcesz pobrać zamówienie, gdzie Kraj to „Indie”, możesz użyć notacji z kropkami, jak w poniższym stwierdzeniu.

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

To zapytanie można również napisać jak poniżej

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

Przykład

>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"}
	}
>

operator $eq z tablicą

Operator $eq pobierze wszystkie dokumenty, jeśli określony warunek jest spełniony dla dowolnego elementu w tablicy. Mamy OrderItems tablicy w dokumencie. Jeśli chcesz odfiltrować dokumenty, w których zamówiono również „papier”, to zestawienie będzie wyglądać następująco.

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

To zapytanie można również napisać jak poniżej

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

Przykład

>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. Operator $gt

Możesz użyć operatora $gt, aby pobrać dokumenty, w których wartość pola jest większa niż określona wartość. Poniższe oświadczenie spowoduje pobranie dokumentów, w których OrderTotal jest większa niż 800.

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE OrderTotal>800.00

Przykład

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

3. Operator $gte

Możesz użyć operatora $gte, aby pobrać dokumenty, w których wartość pola jest większa lub równa określonej wartości. Poniższe oświadczenie spowoduje pobranie dokumentów, w których OrderTotal jest większa lub równa 800.

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE OrderTotal>=800.00

Przykład

>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. Operator $lt

Możesz użyć operatora $lt, aby pobrać dokumenty, w których wartość pola jest mniejsza niż określona wartość. Poniższe oświadczenie spowoduje pobranie dokumentów, w których OrderTotal wynosi mniej niż 800.

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE OrderTotal<800.00

Przykład

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

4. Operator $lte

Możesz użyć operatora $lte, aby pobrać dokumenty, w których wartość pola jest mniejsza lub równa określonej wartości. Poniższe oświadczenie spowoduje pobranie dokumentów, w których OrderTotal jest mniejsza lub równa 800.

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE OrderTotal<=800.00

Przykład

>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 operator

Możesz użyć operatora $ne, aby pobrać dokumenty, w których wartość pola nie jest równa określonej wartości.

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

Podobna instrukcja SQL byłaby następująca

SELECT * FROM orders WHERE PaymentMode != "Card"

Przykład

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

6. Operator $w

Możesz użyć operatora $in, aby pobrać dokumenty, w których wartość pola jest równa dowolnej wartości w określonej tablicy.

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

Przykład

>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. Operator $9

Możesz użyć operatora $nin, aby pobrać dokumenty, w których wartość pola nie jest równa żadnej wartości w określonej tablicy. Wybierze również dokumenty, w których pole nie istnieje.

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

Przykład

>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}
		]
	}
>

Indeksowanie

Wiemy, że indeksowanie jest bardzo ważne, jeśli wykonujemy zapytania na dużej bazie danych. Bez indeksowania wykonanie zapytania może być kosztowne. Możemy dodać prosty indeks rosnąco do pojedynczego pola, używając poniższej instrukcji.

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

MongoDB domyślnie tworzy unikalny indeks w polu „_id”. Unikalny indeks uniemożliwi wstawienie dwóch dokumentów o tej samej wartości dla tego pola. Jeśli chcesz utworzyć unikalny indeks, instrukcja wyglądałaby następująco.

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

Wniosek

Mam nadzieję, że dzisiaj nauczyłeś się czegoś nowego. Jeśli chcesz dowiedzieć się więcej o MongoDB, oto ciekawy artykuł na temat Self-Hosted MongoDB. Zapraszam również do wypróbowania rzeczy na własną rękę i podzielenia się swoimi doświadczeniami w sekcji komentarzy. Ponadto, jeśli napotkasz jakiekolwiek problemy z którąkolwiek z powyższych definicji, możesz zapytać mnie w komentarzach poniżej.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoParseError:opcje useCreateIndex, useFindAndModify nie są obsługiwane

  2. Konwersja dokumentów BSON do JSON w Javie

  3. MongoDB, MapReduce i sortowanie

  4. Nodejs / Express — uruchamianie mojej aplikacji:express.createServer() jest przestarzałe

  5. Jak działa hideIndex() w MongoDB?