MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So führen Sie grundlegende Abfragevorgänge in MongoDB durch

In diesem Artikel behandeln wir die Durchführung grundlegender Abfragevorgänge in MongoDB. Nach der weltweiten Verbreitung des Internets produzieren wir Daten in einem beispiellosen Tempo. Da wir die erforderlichen Daten aus der Datenbank sammeln/anfordern müssen, um eine Art Analyse durchzuführen, ist es von größter Bedeutung, dass wir das richtige Tool zum Abfragen der Daten auswählen.

Genau hier kommt MongoDB ins Spiel. MongoDB ist eine unstrukturierte Datenbank, die Daten in Form von Dokumenten speichert. Darüber hinaus ist MongoDB sehr effektiv bei der Handhabung enormer Datenmengen und ist die am häufigsten verwendete NoSQL-Datenbank, da sie eine reichhaltige Abfragesprache und einen vielseitigen und einfachen Datenzugriff bietet.

Erstellen Sie eine Beispieldatenbank

Vor dem Start erstellen wir eine Beispiel-DB mit einigen Beispieldaten, um alle Operationen durchzuführen.

Wir erstellen eine Datenbank mit dem Namen myDB und erstellt eine Sammlung mit dem Namen orders . Dafür wäre die Anweisung wie folgt.

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

MongoDB verwendet die Zeilen und Spalten nicht. Es speichert die Daten in einem Dokumentformat. Eine Sammlung ist eine Gruppe von Dokumenten.

Sie können alle Sammlungen in einer Datenbank überprüfen, indem Sie die folgende Anweisung verwenden.

> use myDB
>show collections
orders
system.indexes
>

Lassen Sie uns einige Dokumente einfügen, indem Sie die folgende Anweisung verwenden.

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

Ein Dokument ist das Äquivalent einer RDBMS-Zeile. Es muss nicht in jedem Dokument dasselbe Schema vorhanden sein. Das bedeutet, dass ein Dokument möglicherweise kein Feld hat, das keinen Wert hat.

Dokumente abfragen

find()-Methode

Sie müssen die Methode find() verwenden, um Dokumente aus MongoDB-Sammlungen abzufragen. Die folgende Anweisung ruft alle Dokumente aus der Sammlung ab.

> 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

Wenn Sie nur ausgewählte Felder abrufen möchten, können Sie die Projektion verwenden. Die folgende Anweisung ruft nur Kunde ab und E-Mail Feld.

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

Filtern Sie die Dokumente durch Angabe einer Bedingung

Jetzt lernen wir, wie wir die Dokumente abrufen können, die einer bestimmten Bedingung entsprechen. MongoDB bietet dafür viele Vergleichsoperatoren.

1. $eq-Operator

Der $eq-Operator überprüft die Gleichheit des Feldwerts mit dem angegebenen Wert. Um die Bestellung abzurufen, muss PaymentMode 'Karte' ist, können Sie die folgende Anweisung verwenden

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

Diese Abfrage kann auch wie unten geschrieben werden

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE PaymentMode="Card"

Beispiel

>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 mit eingebettetem Dokument

Sie haben vielleicht bemerkt, dass wir ein eingebettetes Dokument Adresse eingefügt haben in den Bestellungen Sammlung. Wenn Sie die Bestellung aus Land abrufen möchten 'Indien' ist, können Sie eine Punktnotation wie die folgende Anweisung verwenden.

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

Diese Abfrage kann auch wie unten geschrieben werden

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

Beispiel

>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 mit Array

Der $eq-Operator ruft alle Dokumente ab, wenn die angegebene Bedingung für ein beliebiges Element in einem Array wahr ist. Wir haben ein OrderItems Array im Dokument. Wenn Sie die Dokumente filtern möchten, bei denen auch 'Papier' bestellt wurde, lautet die Anweisung wie folgt.

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

Diese Abfrage kann auch wie unten geschrieben werden

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

Beispiel

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

Sie können den $gt-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds größer als der angegebene Wert ist. Die folgende Anweisung ruft die Dokumente ab, in denen OrderTotal ist größer als 800.

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE OrderTotal>800.00

Beispiel

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

3. $gte-Operator

Sie können den $gte-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds größer oder gleich dem angegebenen Wert ist. Die folgende Anweisung ruft die Dokumente ab, in denen OrderTotal größer oder gleich 800 ist.

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE OrderTotal>=800.00

Beispiel

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

Sie können den $lt-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds kleiner als der angegebene Wert ist. Die folgende Anweisung ruft die Dokumente ab, in denen OrderTotal ist kleiner als 800.

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE OrderTotal<800.00

Beispiel

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

4. $lte-Operator

Sie können den $lte-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds kleiner oder gleich dem angegebenen Wert ist. Die folgende Anweisung ruft die Dokumente ab, in denen OrderTotal ist kleiner oder gleich 800.

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE OrderTotal<=800.00

Beispiel

>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

Sie können den $ne-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds nicht dem angegebenen Wert entspricht.

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

Eine ähnliche SQL-Anweisung würde wie folgt aussehen

SELECT * FROM orders WHERE PaymentMode != "Card"

Beispiel

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

6. $in-Operator

Sie können den $in-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds gleich einem beliebigen Wert im angegebenen Array ist.

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

Beispiel

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

Sie können den $nin-Operator verwenden, um die Dokumente abzurufen, bei denen der Wert eines Felds keinem Wert im angegebenen Array entspricht. Es werden auch die Dokumente ausgewählt, in denen das Feld nicht vorhanden ist.

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

Beispiel

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

Indexierung

Wir wissen, dass die Indizierung sehr wichtig ist, wenn wir die Abfragen in einer großen Datenbank durchführen. Ohne Indizierung kann die Ausführung einer Abfrage teuer werden. Wir können einem einzelnen Feld einen einfachen aufsteigenden Index hinzufügen, indem wir die folgende Anweisung verwenden.

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

MongoDB erstellt standardmäßig einen eindeutigen Index für das Feld „_id“. Ein eindeutiger Index verhindert das Einfügen von zwei Dokumenten mit demselben Wert für dieses Feld. Wenn Sie einen eindeutigen Index erstellen möchten, lautet die Anweisung wie folgt.

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

Fazit

Ich hoffe, Sie haben heute etwas Neues gelernt. Wenn Sie noch ein paar Dinge über MongoDB lernen möchten, finden Sie hier einen interessanten Artikel über selbstgehostete MongoDB. Ich lade Sie auch ein, Dinge selbst auszuprobieren und Ihre Erfahrungen im Kommentarbereich zu teilen. Wenn Sie Probleme mit einer der oben genannten Definitionen haben, können Sie mich außerdem gerne in den Kommentaren unten fragen.