Arbeiten mit Dokumenten - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten mit Dokumenten

Als Dokumentendatenbank macht es Amazon DocumentDB einfach, JSON Daten zu speichern, abzufragen und zu indizieren. In Amazon DocumentDB entspricht eine Sammlung einer Tabelle in einer relationalen Datenbank, außer dass kein einziges Schema für alle Dokumente durchgesetzt wird. Mit Sammlungen können Sie ähnliche Dokumente gruppieren und gleichzeitig alle in derselben Datenbank halten, ohne dass sie in ihrer Struktur identisch sein müssen.

Unter Verwendung der Beispieldokumente aus früheren Abschnitten ist es wahrscheinlich, dass Sie Sammlungen für reading_material und office_supplies haben werden. Es liegt in der Verantwortung Ihrer Software, die Zugehörigkeit eines Dokuments zu einer bestimmten Sammlung durchzusetzen.

In den folgenden Beispielen wird MongoDB verwendetAPI, um zu zeigen, wie Dokumente hinzugefügt, abgefragt, aktualisiert und gelöscht werden.

Dokumente hinzufügen

In Amazon DocumentDB wird eine Datenbank erstellt, wenn Sie ein Dokument zum ersten Mal zu einer Sammlung hinzufügen. In diesem Beispiel erstellen Sie eine Sammlung mit dem Namen example in der Datenbank test, die die Standarddatenbank ist, wenn Sie eine Verbindung mit einem Cluster herstellen. Da die Sammlung implizit erstellt wird, wenn das erste Dokument eingefügt wird, gibt es bei der Überprüfung des Sammlungsnamens keine Fehler. Das heißt, ein Tippfehler im Sammlungsnamen, wie z. B. eexample statt example führt dazu, dass das Dokument erstellt und der Sammlung eexample und nicht der beabsichtigten Sammlung hinzugefügt wird. Die Fehlerüberprüfung muss von Ihrer Anwendung durchgeführt werden.

Die folgenden Beispiele verwenden die MongoDBAPI, um Dokumente hinzuzufügen.

Ein einzelnes Dokument hinzufügen

Um ein einzelnes Dokument zu einer Sammlung hinzuzufügen, verwenden Sie die Operation insertOne( {} ) mit dem Dokument, das Sie der Sammlung hinzufügen möchten.

db.example.insertOne( { "Item": "Ruler", "Colors": ["Red","Green","Blue","Clear","Yellow"], "Inventory": { "OnHand": 47, "MinOnHand": 40 }, "UnitPrice": 0.89 } )

Die Ausgabe dieses Vorgangs sieht ungefähr wie folgt aus (JSONFormat).

{ "acknowledged" : true, "insertedId" : ObjectId("5bedafbcf65ff161707de24f") }

Hinzufügen mehrerer Dokumente

Um mehrere Dokumente zu einer Sammlung hinzuzufügen, verwenden Sie die Operation insertMany( [{},...,{}] ) mit einer Liste der Dokumente, die Sie der Sammlung hinzufügen möchten. Obwohl die Dokumente in dieser Liste unterschiedliche Schemata haben, können sie alle zur gleichen Sammlung hinzugefügt werden.

db.example.insertMany( [ { "Item": "Pen", "Colors": ["Red","Green","Blue","Black"], "Inventory": { "OnHand": 244, "MinOnHand": 72 } }, { "Item": "Poster Paint", "Colors": ["Red","Green","Blue","Black","White"], "Inventory": { "OnHand": 47, "MinOnHand": 50 } }, { "Item": "Spray Paint", "Colors": ["Black","Red","Green","Blue"], "Inventory": { "OnHand": 47, "MinOnHand": 50, "OrderQnty": 36 } } ] )

Die Ausgabe dieses Vorgangs sieht ungefähr wie folgt aus (JSONFormat).

{ "acknowledged" : true, "insertedIds" : [ ObjectId("5bedb07941ca8d9198f5934c"), ObjectId("5bedb07941ca8d9198f5934d"), ObjectId("5bedb07941ca8d9198f5934e") ] }

Dokumente werden abgefragt

Manchmal müssen Sie möglicherweise den Bestand Ihres Online-Shops nachschlagen, damit Kunden das Angebot sehen und kaufen können. Die Abfrage einer Sammlung ist relativ einfach, unabhängig davon, ob Sie alle Dokumente in der Sammlung haben möchten oder nur die Dokumente, die ein bestimmtes Kriterium erfüllen.

Verwenden Sie die Operation find(), um Dokumente abzufragen. Der Befehl find() hat einen einzigen Dokumentenparameter, der die Kriterien für die Auswahl der zurückzugebenden Dokumente definiert. Die Ausgabe von find() ist ein Dokument, das als einzelne Textzeile ohne Zeilenumbrüche formatiert ist. Um das Ausgabedokument für eine bessere Lesbarkeit zu formatieren, verwenden Sie find().pretty(). Alle Beispiele in diesem Thema verwenden .pretty() zum Formatieren der Ausgabe.

Verwenden Sie die vier Dokumente, die Sie in den beiden vorangegangenen Übungen in die example Sammlung eingefügt haben — insertOne() undinsertMany().

Alle Dokumente in einer Sammlung abrufen

Um alle Dokumente in Ihrer Sammlung abzurufen, verwenden Sie die Operation find() mit einem leeren Abfragedokument.

Die folgende Abfrage gibt alle Dokumente der Sammlung example zurück.

db.example.find( {} ).pretty()

Dokumente werden abgerufen, die einem Feldwert entsprechen

Um alle Dokumente abzurufen, die mit einem Feld und einem Wert übereinstimmen, verwenden Sie die Operation find() mit einem Abfragedokument, das die entsprechenden Felder und Werte identifiziert.

Bei Verwendung der vorangegangenen Dokumente gibt diese Abfrage alle Dokumente zurück, bei denen das Feld "Item" (Element) "Pen" (Stift) entspricht.

db.example.find( { "Item": "Pen" } ).pretty()

Dokumente werden abgerufen, die einem eingebetteten Dokument entsprechen

Um alle Dokumente zu suchen, die mit einem eingebetteten Dokument übereinstimmen, verwenden Sie die Operation find() mit einem Abfragedokument, in dem der Name des eingebetteten Dokuments sowie alle Felder und Werte für dieses eingebettete Dokument angegeben werden.

Beim Vergleichen mit einem eingebetteten Dokument muss das eingebettete Dokument denselben Namen haben wie in der Abfrage. Zudem müssen die Felder und Werte im eingebetteten Dokument mit der Abfrage übereinstimmen.

Die folgende Abfrage gibt nur das Dokument "Poster Paint" zurück. Dies liegt daran, dass "Pen" über verschiedene Werte für "OnHand" und "MinOnHand" verfügt und "Spray Paint" ein weiteres Feld (OrderQnty) als das Abfragedokument besitzt.

db.example.find({"Inventory": { "OnHand": 47, "MinOnHand": 50 } } ).pretty()

Dokumente werden abgerufen, die einem Feldwert in einem eingebetteten Dokument entsprechen

Um alle Dokumente zu suchen, die mit einem eingebetteten Dokument übereinstimmen, verwenden Sie die Operation find() mit einem Abfragedokument, in dem der Name des eingebetteten Dokuments sowie alle Felder und Werte für dieses eingebettete Dokument angegeben werden.

Aufgrund der vorangegangenen Dokumente verwendet die folgende Abfrage "Punktnotation", um das eingebettete Dokument und die Felder von Interesse anzugeben. Jedes Dokument, das damit übereinstimmt, wird zurückgegeben, unabhängig davon, welche anderen Felder im eingebetteten Dokument vorhanden sind. Die Abfrage gibt "Poster Paint" und "Spray Paint" zurück, weil sie beide den angegebenen Feldern und Werten entsprechen.

db.example.find({"Inventory.OnHand": 47, "Inventory.MinOnHand": 50 }).pretty()

Dokumente werden abgerufen, die einem entsprechen aArray

Um alle Dokumente zu finden, die einem Array entsprechen, verwenden Sie die Operation find() mit dem Namen des Arrays, an dem Sie interessiert sind, und allen Werten in diesem Array. Die Abfrage gibt alle Dokumente zurück, in denen sich ein Array mit diesem Namen befindet und in denen die Array-Werte identisch sind und die gleiche Reihenfolge wie in der Abfrage aufweisen.

Die folgende Abfrage gibt nur "Pen" zurück, da "Poster Paint" über eine zusätzlichen Farbe (White) verfügt und die Farben in "Spray Paint" in einer anderen Reihenfolge vorliegen.

db.example.find( { "Colors": ["Red","Green","Blue","Black"] } ).pretty()

Dokumente werden abgerufen, die einem Wert in einem Array entsprechen

Um alle Dokumente mit einem bestimmten Array-Wert zu finden, verwenden Sie die Operation find() mit dem Namen und Wert des Arrays, an dem Sie interessiert sind.

db.example.find( { "Colors": "Red" } ).pretty()

Bei der vorherigen Operation werden alle drei Dokumente zurückgegeben, da jedes davon ein Array mit dem Namen Colors und den Wert "Red" irgendwo im Array besitzt. Wenn Sie den Wert "White" angeben, gibt die Abfrage nur "Poster Paint" zurück.

Dokumente mithilfe von Operatoren abrufen

Die folgende Abfrage gibt alle Dokumente zurück, in denen der Wert "Inventory.OnHand" kleiner als 50 ist.

db.example.find( { "Inventory.OnHand": { $lt: 50 } } )

Eine Liste der unterstützten Abfrageoperatoren finden Sie unter Abfrage- und Projektionsoperatoren.

Dokumente werden aktualisiert

In der Regel sind Ihre Dokumente nicht statisch und werden als Teil Ihrer Anwendungs-Workflows aktualisiert. Die folgenden Beispiele zeigen einige der Möglichkeiten, wie Sie Dokumente aktualisieren können.

Um ein bestehendes Dokument zu aktualisieren, verwenden Sie die Operationupdate(). Die Operation update() besitzt zwei Dokumentenparameter. Das erste Dokument gibt an, welche Dokumente aktualisiert werden sollen. Das zweite Dokument gibt an, welche Aktualisierungen durchzuführen sind.

Wenn Sie ein vorhandenes Feld aktualisieren — unabhängig davon, ob es sich bei dem Feld um ein einfaches Feld, ein Array oder ein eingebettetes Dokument handelt — geben Sie den Feldnamen und seine Werte an. Am Ende der Operation wirkt es so, als ob das Feld im alten Dokument durch das neue Feld und die Werte ersetzt wurde.

Aktualisierung der Werte eines vorhandenen Felds

Verwenden Sie die folgenden vier Dokumente, die Sie zuvor hinzugefügt haben, für die folgenden Aktualisierungsoperationen.

{ "Item": "Ruler", "Colors": ["Red","Green","Blue","Clear","Yellow"], "Inventory": { "OnHand": 47, "MinOnHand": 40 }, "UnitPrice": 0.89 }, { "Item": "Pen", "Colors": ["Red","Green","Blue","Black"], "Inventory": { "OnHand": 244, "MinOnHand": 72 } }, { "Item": "Poster Paint", "Colors": ["Red","Green","Blue","Black","White"], "Inventory": { "OnHand": 47, "MinOnHand": 50 } }, { "Item": "Spray Paint", "Colors": ["Black","Red","Green","Blue"], "Inventory": { "OnHand": 47, "MinOnHand": 50, "OrderQnty": 36 } }
So aktualisieren Sie ein einfaches Feld

Um ein einfaches Feld zu aktualisieren, verwenden Sie update() mit $set, um den Feldnamen und den neuen Wert anzugeben. Im folgenden Beispiel wird das Item von "Pen" in "Gel Pen" geändert.

db.example.update( { "Item" : "Pen" }, { $set: { "Item": "Gel Pen" } } )

Ergebnisse dieser Operation sehen in etwa folgendermaßen aus.

{ "Item": "Gel Pen", "Colors": ["Red","Green","Blue","Black"], "Inventory": { "OnHand": 244, "MinOnHand": 72 } }
So aktualisieren Sie ein Array

Das folgende Beispiel ersetzt das vorhandene Array von Farben mit einem neuen Array, das in der Liste der Farben Orange enthält und White weglässt. Die neue Liste von Farben liegt in der Reihenfolge vor, die in der Operation update() festgelegt wurde.

db.example.update( { "Item" : "Poster Paint" }, { $set: { "Colors": ["Red","Green","Blue","Orange","Black"] } } )

Ergebnisse dieser Operation sehen in etwa folgendermaßen aus.

{ "Item": "Poster Paint", "Colors": ["Red","Green","Blue","Orange","Black"], "Inventory": { "OnHand": 47, "MinOnHand": 50 } }

Hinzufügen eines neuen Feldes

Um ein Dokument durch Hinzufügen eines oder mehrerer neuer Felder zu ändern, verwenden Sie die Operation update() mit einem Abfragedokument, das das einzufügende Dokument und die neuen Felder und Werte, die mit dem Operator $set eingefügt werden sollen, identifiziert.

Im folgenden Beispiel wird das Feld UnitPrice mit dem Wert 3.99 dem Dokument "Spray Paints" hinzugefügt. Beachten Sie, dass der Wert 3.99 numerisch ist und keine Zeichenfolge.

db.example.update( { "Item": "Spray Paint" }, { $set: { "UnitPrice": 3.99 } } )

Die Ergebnisse dieser Operation sehen ungefähr wie folgt aus (JSONFormat).

{ "Item": "Spray Paint", "Colors": ["Black","Red","Green","Blue"], "Inventory": { "OnHand": 47, "MinOnHand": 50, "OrderQnty": 36 }, "UnitPrice": 3.99 }

Ein eingebettetes Dokument ersetzen

Um ein Dokument durch Ersetzen eines eingebetteten Dokuments zu ändern, verwenden Sie die Operation update() mit Dokumenten, die das eingebettete Dokument und seine neuen Felder und Werte mit dem Operator $set identifizieren.

Anhand des folgenden Dokuments

db.example.insert({ "DocName": "Document 1", "Date": { "Year": 1987, "Month": 4, "Day": 18 } })
So ersetzen Sie ein eingebettetes Dokument

Im folgenden Beispiel wird das aktuellen Datumsdokument durch ein neues ersetzt, das nur die Felder Month und Day besitzt; Year wurde entfernt.

db.example.update( { "DocName" : "Document 1" }, { $set: { "Date": { "Month": 4, "Day": 18 } } } )

Ergebnisse dieser Operation sehen in etwa folgendermaßen aus.

{ "DocName": "Document 1", "Date": { "Month": 4, "Day": 18 } }

Neue Felder in ein eingebettetes Dokument einfügen

So fügen Sie einem eingebetteten Dokument neue Felder hinzu

Um ein Dokument durch Hinzufügen eines oder mehrerer neuer Felder zu einem eingebetteten Dokument zu ändern, verwenden Sie die Operation update() mit Dokumenten, die das eingebettete Dokument identifizieren, und "Punktnotation" zum Angeben des eingebetteten Dokuments und der neuen Felder und Werte verwenden, die mit dem Operator $set eingefügt werden sollen.

Beim folgenden Dokument verwendet der folgende Code "Punktnotierung", um die Felder DoW und Year im eingebetteten Date-Dokument und Words im übergeordneten Dokument einzufügen.

{ "DocName": "Document 1", "Date": { "Month": 4, "Day": 18 } }
db.example.update( { "DocName" : "Document 1" }, { $set: { "Date.Year": 1987, "Date.DoW": "Saturday", "Words": 2482 } } )

Ergebnisse dieser Operation sehen in etwa folgendermaßen aus.

{ "DocName": "Document 1", "Date": { "Month": 4, "Day": 18, "Year": 1987, "DoW": "Saturday" }, "Words": 2482 }

Ein Feld aus einem Dokument entfernen

Um ein Dokument zu ändern, indem Sie ein Feld aus dem Dokument entfernen, verwenden Sie die Operation update() mit einem Abfragedokument, das das Dokument identifiziert, aus dem das Feld entfernt werden soll, und den Operator $unset, um das zu entfernende Feld anzugeben.

Das folgende Beispiel entfernt das Feld Words aus dem vorangegangen Dokument.

db.example.update( { "DocName" : "Document 1" }, { $unset: { Words:1 } } )

Ergebnisse dieser Operation sehen in etwa folgendermaßen aus.

{ "DocName": "Document 1", "Date": { "Month": 4, "Day": 18, "Year": 1987, "DoW": "Saturday" } }

Ein Feld aus mehreren Dokumenten entfernen

Um ein Dokument zu ändern, indem ein Feld aus mehreren Dokumenten entfernt wird, verwenden Sie die Operation update() mit dem Operator $unset und der Option multi, die auf true festgelegt ist.

Im folgenden Beispiel wird das Feld Inventory aus allen Dokumenten in der Beispielsammlung entfernt. Wenn ein Dokument das Feld Inventory nicht hat, wird keine Aktion für dieses Dokument durchgeführt. Wenn multi: true weggelassen wird, wird die Aktion nur für das erste Dokument ausgeführt, das das Kriterium erfüllt.

db.example.update( {}, { $unset: { Inventory:1 } }, { multi: true } )

Dokumente löschen

Um ein Dokument aus Ihrer Datenbank zu entfernen, verwenden Sie die Operation remove() und geben Sie an, welches Dokument Sie entfernen möchten. Der folgende Code entfernt "Gel Pen" aus Ihrer example-Sammlung.

db.example.remove( { "Item": "Gel Pen" } )

Um alle Dokumente aus Ihrer Datenbank zu entfernen, verwenden Sie die Operation remove() mit einer leeren Abfrage (s. unten).

db.example.remove( { } )