Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation des éléments dans DynamoDB à l'aide du modèle de document AWS SDK for .NET
Les exemples de code suivants montrent comment effectuer différentes opérations avec le modèle de document AWS SDK for .NET . Vous pouvez utiliser ces exemples pour effectuer des opérations CRUD, par lot et de transaction.
Rubriques
Pour effectuer les opérations de données à l'aide du modèle de document, vous devez d'abord appeler la méthode Table.LoadTable
, qui crée une instance de la classe Table
qui représente une table spécifique. L'extrait de code C# suivant crée un objet Table
qui représente la table ProductCatalog
dans Amazon DynamoDB.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog");
Note
En général, vous utilisez la méthode LoadTable
une fois au début de votre application, car elle effectue un appel DescribeTable
qui s'ajoute à l'aller-retour vers DynamoDB.
Vous pouvez ensuite utiliser l'objet Table
pour exécuter différentes opérations de données. Chaque opération de données possède deux types de surcharge : un qui prend les paramètres requis minimum et un autre qui prend les informations facultatives de configuration propres à l'opération. Par exemple, pour récupérer un élément, vous devez fournir la valeur de clé primaire de la table, auquel cas, vous pouvez utiliser la surcharge GetItem
suivante :
Exemple
// Get the item from a table that has a primary key that is composed of only a partition key. Table.GetItem(Primitive partitionKey); // Get the item from a table whose primary key is composed of both a partition key and sort key. Table.GetItem(Primitive partitionKey, Primitive sortKey);
Vous pouvez aussi passer des paramètres facultatifs à ces méthodes. Par exemple, le GetItem
précédent retourne l'élément entier, y compris tous ses attributs. Vous pouvez spécifier le cas échéant une liste d'attributs à extraire. Dans ce cas, vous utilisez la surcharge GetItem
suivante qui accepte le paramètre d'objet de configuration spécifique à l'opération :
Exemple
// Configuration object that specifies optional parameters. GetItemOperationConfig config = new GetItemOperationConfig() { AttributesToGet = new List<string>() { "Id", "Title" }, }; // Pass in the configuration to the GetItem method. // 1. Table that has only a partition key as primary key. Table.GetItem(Primitive partitionKey, GetItemOperationConfig config); // 2. Table that has both a partition key and a sort key. Table.GetItem(Primitive partitionKey, Primitive sortKey, GetItemOperationConfig config);
Vous pouvez utiliser l'objet de configuration pour spécifier plusieurs paramètres facultatifs, tels que la demande d'une liste spécifique d'attributs ou la spécification de la taille de la page (nombre d'éléments par page). Chaque méthode d'opération de données a sa propre classe de configuration. Par exemple, vous pouvez utiliser la classe GetItemOperationConfig
afin de fournir des options pour l’opération GetItem
. Vous pouvez utiliser la classe PutItemOperationConfig
afin de fournir des paramètres facultatifs pour l’opération PutItem
.
Les sections suivantes décrivent chacune des opérations de données qui sont prises en charge par la classe Table
.
Mettre un objet - Table. PutItem méthode
La méthode PutItem
charge l'instance Document
en entrée sur la table. Si un élément ayant une clé primaire spécifiée dans l'instance Document
en entrée existe dans la table, l'opération PutItem
remplace la totalité de l'élément existant. Le nouvel élément est identique à l'objet Document
que vous fournissez à la méthode PutItem
. Si votre élément d'origine a des attributs supplémentaires, ceux-ci ne sont plus présents dans le nouvel élément.
Voici les étapes à suivre pour insérer un nouvel élément dans une table à l'aide du modèle de document AWS SDK for .NET .
-
Exécutez la méthode
Table.LoadTable
qui fournit le nom de la table dans laquelle vous voulez insérer un élément. -
Créez un objet
Document
qui a une liste de noms d'attribut et de leurs valeurs. -
Exécutez
Table.PutItem
en fournissant l'instanceDocument
comme paramètre.
L'exemple de code C# suivant présente les tâches précédentes. L'exemple charge un élément dans la table ProductCatalog
.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; book["Title"] = "Book 101 Title"; book["ISBN"] = "11-11-11-11"; book["Authors"] = new List<string> { "Author 1", "Author 2" }; book["InStock"] = new DynamoDBBool(true); book["QuantityOnHand"] = new DynamoDBNull(); table.PutItem(book);
Dans l'exemple précédent, l'Document
instance crée un élément qui possède des Null
attributs Number
String
String Set
,Boolean
,, et. (Null
est utilisé pour indiquer que la QuantityOnmain de ce produit est inconnue.) Pour Boolean
et Null
, utilisez les méthodes constructeur DynamoDBBool
et DynamoDBNull
.
Dans DynamoDB, les types de données List
et Map
peuvent contenir des éléments composés d'autres types de données. Voici comment mapper ces types de données à l'API du modèle de document :
-
List (liste) – Utilisez le constructeur
DynamoDBList
. -
Map (mappage) – Utilisez le constructeur
Document
.
Vous pouvez modifier l'exemple précédent pour ajouter un attribut List
à l'élément. Pour ce faire, utilisez un constructeur DynamoDBList
, comme illustré dans l'exemple de code suivant :
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; /*other attributes omitted for brevity...*/ var relatedItems = new DynamoDBList(); relatedItems.Add(341); relatedItems.Add(472); relatedItems.Add(649); book.Add("RelatedItems", relatedItems); table.PutItem(book);
Pour ajouter un attribut Map
à l'élément « book », vous définissez un autre Document
. L'exemple de code suivant montre comment procéder.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; /*other attributes omitted for brevity...*/ var pictures = new Document(); pictures.Add("FrontView", "http://example.com/products/101_front.jpg" ); pictures.Add("RearView", "http://example.com/products/101_rear.jpg" ); book.Add("Pictures", pictures); table.PutItem(book);
Ces exemples sont basés sur l'élément affiché dans Spécification d'attributs d'élément lors de l'utilisation d'expressions. Le modèle de document vous permet de créer des attributs imbriqués, tels que l'attribut ProductReviews
illustré dans l'étude de cas.
Spécification de paramètres facultatifs
Vous pouvez configurer des paramètres facultatifs pour l'opération PutItem
en ajoutant le paramètre PutItemOperationConfig
. Pour obtenir la liste complète des paramètres facultatifs, voir PutItem. L'exemple de code C# suivant insère un élément dans la table ProductCatalog
. Il spécifie le paramètre facultatif suivant :
-
Le paramètre
ConditionalExpression
pour en faire une demande d'insertion conditionnelle. L'exemple crée une expression spécifiant que l'attributISBN
doit avoir une valeur spécifique, présente dans l'élément que vous remplacez.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 555; book["Title"] = "Book 555 Title"; book["Price"] = "25.00"; book["ISBN"] = "55-55-55-55"; book["Name"] = "Item 1 updated"; book["Authors"] = new List<string> { "Author x", "Author y" }; book["InStock"] = new DynamoDBBool(true); book["QuantityOnHand"] = new DynamoDBNull(); // Create a condition expression for the optional conditional put operation. Expression expr = new Expression(); expr.ExpressionStatement = "ISBN = :val"; expr.ExpressionAttributeValues[":val"] = "55-55-55-55"; PutItemOperationConfig config = new PutItemOperationConfig() { // Optional parameter. ConditionalExpression = expr }; table.PutItem(book, config);
Obtenir un objet - Tableau. GetItem
L'opération GetItem
récupère un élément comme instance Document
. Vous devez fournir la clé primaire de l'élément que vous souhaitez récupérer, comme illustré dans l'extrait de code C# suivant :
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); Document document = table.GetItem(101); // Primary key 101.
L'opération GetItem
retourne tous les attributs de l'élément et effectue une lecture cohérente à terme (eventually consistent) (voir Cohérence en lecture) par défaut.
Spécification de paramètres facultatifs
Vous pouvez configurer des options supplémentaires pour l'opération GetItem
en ajoutant le paramètre GetItemOperationConfig
. Pour obtenir la liste complète des paramètres facultatifs, voir GetItem. L'exemple de code C# suivant extrait trois éléments de la table ProductCatalog
. Il spécifie le paramètre GetItemOperationConfig
pour fournir les paramètres facultatifs suivants :
-
Le paramètre
AttributesToGet
pour récupérer uniquement les attributs spécifiés. -
Le paramètre
ConsistentRead
pour demander les dernières valeurs de tous les attributs spécifiés. Pour en savoir plus sur la cohérence des données, consultez Cohérence en lecture.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); GetItemOperationConfig config = new GetItemOperationConfig() { AttributesToGet = new List<string>() { "Id", "Title", "Authors", "InStock", "QuantityOnHand" }, ConsistentRead = true }; Document doc = table.GetItem(101, config);
Lorsque vous récupérez un élément à l'aide de l'API de modèle de document, vous pouvez accéder aux éléments individuels de l'objet Document
retourné, comme illustré dans l'exemple suivant.
Exemple
int id = doc["Id"].AsInt(); string title = doc["Title"].AsString(); List<string> authors = doc["Authors"].AsListOfString(); bool inStock = doc["InStock"].AsBoolean(); DynamoDBNull quantityOnHand = doc["QuantityOnHand"].AsDynamoDBNull();
Pour les attributs qui sont de type List
ou Map
, voici comment mapper ces attributs à l'API de modèle de document :
-
List
– Utilisez la méthodeAsDynamoDBList
. -
Map
– Utilisez la méthodeAsDocument
.
L'exemple de code suivant montre comment récupérer a List
(RelatedItems) et a Map
(Pictures) de l'Document
objet :
Exemple
DynamoDBList relatedItems = doc["RelatedItems"].AsDynamoDBList(); Document pictures = doc["Pictures"].AsDocument();
Supprimer un élément - Tableau. DeleteItem
L'opération DeleteItem
supprime un élément d'une table. Vous pouvez passer la clé primaire de l'élément comme paramètre. Sinon, si vous avez déjà lu un élément et que vous avez l'objet Document
correspondant, vous pouvez le passer comme paramètre pour la méthode DeleteItem
, comme illustré dans l'exemple de code C# suivant.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); // Retrieve a book (a Document instance) Document document = table.GetItem(111); // 1) Delete using the Document instance. table.DeleteItem(document); // 2) Delete using the primary key. int partitionKey = 222; table.DeleteItem(partitionKey)
Spécification de paramètres facultatifs
Vous pouvez configurer des options supplémentaires pour l'opération Delete
en ajoutant le paramètre DeleteItemOperationConfig
. Pour obtenir la liste complète des paramètres facultatifs, voir DeleteTable. L'exemple de code C# suivant spécifie les deux paramètres facultatifs suivants :
-
Le paramètre
ConditionalExpression
pour s'assurer que l'élément « book » en cours de suppression possède une valeur spécifique pour l'attribut ISBN. -
Le paramètre
ReturnValues
pour demander que la méthodeDelete
retourne l'élément qu'elle a supprimé.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); int partitionKey = 111; Expression expr = new Expression(); expr.ExpressionStatement = "ISBN = :val"; expr.ExpressionAttributeValues[":val"] = "11-11-11-11"; // Specify optional parameters for Delete operation. DeleteItemOperationConfig config = new DeleteItemOperationConfig { ConditionalExpression = expr, ReturnValues = ReturnValues.AllOldAttributes // This is the only supported value when using the document model. }; // Delete the book. Document d = table.DeleteItem(partitionKey, config);
Mettre à jour un élément - Tableau. UpdateItem
L'opération UpdateItem
met à jour un élément existant s'il est présent. Si l'élément qui possède la clé primaire spécifiée est introuvable, l'opération UpdateItem
ajoute un nouvel élément.
Vous pouvez utiliser l'opération UpdateItem
pour mettre à jour les valeurs d'attribut existantes, ajouter de nouveaux attributs à la collection existante ou supprimer des attributs de la collection existante. Vous fournissez ces mises à jour en créant une instance Document
qui décrit les mises à jour que vous souhaitez effectuer.
L'action UpdateItem
utilise les directives suivantes :
-
Si l'élément n'existe pas,
UpdateItem
ajoute un nouvel élément à l'aide de la clé primaire spécifiée dans l'entrée. -
Si l'élément existe,
UpdateItem
applique les mises à jour comme suit :-
Remplace les valeurs d'attribut existantes par les valeurs de la mise à jour.
-
Si un attribut que vous fournissez en entrée n'existe pas, un nouvel attribut est ajouté à l'élément.
-
Si l'attribut en entrée a la valeur null, il est supprimé s'il est présent.
-
Note
Cette UpdateItem
opération de niveau intermédiaire ne prend pas en charge l'Add
action (voir UpdateItem) prise en charge par l'opération DynamoDB sous-jacente.
Note
L'opération PutItem
(Mettre un objet - Table. PutItem méthode) peut également exécuter une mise à jour. Si vous appelez PutItem
pour charger un élément et que la clé primaire existe, l'opération PutItem
remplace la totalité de l'élément. S'il existe des attributs dans l'élément existant et qu'ils ne sont pas spécifiés dans l'élément Document
en cours d'insertion, l'opération PutItem
supprime ces attributs. Toutefois, UpdateItem
ne met à jour que les attributs spécifiés en entrée. Tous les autres attributs de cet élément demeurent inchangés.
Les étapes à suivre pour mettre à jour un élément à l'aide du modèle de AWS SDK for .NET document sont les suivantes :
-
Exécutez la méthode
Table.LoadTable
en fournissant le nom de la table dans laquelle vous souhaitez effectuer l'opération de mise à jour. -
Créez une instance
Document
en fournissant toutes les mises à jour que vous voulez effectuer.Pour supprimer un attribut existant, spécifiez la valeur d'attribut comme null.
-
Appelez la méthode
Table.UpdateItem
et fournissez l'instanceDocument
comme paramètre d'entrée.Vous devez fournir la clé primaire dans l'instance
Document
ou explicitement comme paramètre.
L'exemple de code C# suivant présente les tâches précédentes. L'exemple de code met à jour un élément de la table Book
. L'opération UpdateItem
met à jour l'attribut Authors
existant, supprime l'attribut PageCount
et ajoute un nouvel attribut XYZ
. L'instance Document
inclut la clé primaire de l'élément « book » à mettre à jour.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); // Set the attributes that you wish to update. book["Id"] = 111; // Primary key. // Replace the authors attribute. book["Authors"] = new List<string> { "Author x", "Author y" }; // Add a new attribute. book["XYZ"] = 12345; // Delete the existing PageCount attribute. book["PageCount"] = null; table.Update(book);
Spécification de paramètres facultatifs
Vous pouvez configurer des options supplémentaires pour l'opération UpdateItem
en ajoutant le paramètre UpdateItemOperationConfig
. Pour obtenir la liste complète des paramètres facultatifs, voir UpdateItem.
L'exemple de code C# suivant met à jour le prix d'un élément « book » avec la valeur 25. Il spécifie les deux paramètres facultatifs suivants :
-
Le paramètre
ConditionalExpression
qui identifie l'attributPrice
avec la valeur20
à laquelle vous vous attendiez. -
Le paramètre
ReturnValues
pour demander que l'opérationUpdateItem
retourne l'élément qui est mis à jour.
Exemple
Table table = Table.LoadTable(client, "ProductCatalog"); string partitionKey = "111"; var book = new Document(); book["Id"] = partitionKey; book["Price"] = 25; Expression expr = new Expression(); expr.ExpressionStatement = "Price = :val"; expr.ExpressionAttributeValues[":val"] = "20"; UpdateItemOperationConfig config = new UpdateItemOperationConfig() { ConditionalExpression = expr, ReturnValues = ReturnValues.AllOldAttributes }; Document d1 = table.Update(book, config);
Écriture par lots – Insertion et suppression de plusieurs éléments
L'écriture par lots fait référence à l'insertion et la suppression de plusieurs éléments dans un lot. L'opération vous permet d'insérer et de supprimer plusieurs éléments d'une ou de plusieurs tables en un seul appel. Voici les étapes à suivre pour placer ou supprimer plusieurs éléments d'un tableau à l'aide de l'API du modèle de AWS SDK for .NET document.
-
Créez un objet
Table
en exécutant la méthodeTable.LoadTable
en fournissant le nom de la table dans laquelle vous souhaitez effectuer l'opération de traitement par lots. -
Exécutez la méthode
createBatchWrite
sur l'instance de table que vous avez créée à l'étape précédente, puis créez un objetDocumentBatchWrite
. -
Utilisez les méthodes de l'objet
DocumentBatchWrite
pour spécifier les documents que vous souhaitez charger ou supprimer. -
Appelez la méthode
DocumentBatchWrite.Execute
pour exécuter l'opération par lot.Lorsque vous utilisez l'API de modèle de document, vous pouvez spécifier un nombre quelconque d'opérations dans un lot. Cependant, DynamoDB limite le nombre d'opérations d'un lot et la taille totale du lot dans une opération par lot. Pour plus d'informations sur les limites spécifiques, consultez la section BatchWriteArticle. Si l'API de modèle de document détecte que votre demande d'écriture par lots a dépassé le nombre de requêtes d'écriture autorisé ou que la taille de charge utile HTTP d'un traitement par lots a dépassé la limite autorisée par
BatchWriteItem
, elle scinde le lot en plusieurs lots plus petits. En outre, si une réponse à une écriture par lot retourne des éléments non traités, l'API de modèle de document envoie automatiquement une autre requête de lots avec les éléments non traités.
L'exemple de code C# suivant présente les étapes précédentes. L'exemple utilise l'opération d'écriture par lots afin d'effectuer deux écritures ; charger un élément « book » et supprimer un autre élément « book ».
Table productCatalog = Table.LoadTable(client, "ProductCatalog"); var batchWrite = productCatalog.CreateBatchWrite(); var book1 = new Document(); book1["Id"] = 902; book1["Title"] = "My book1 in batch write using .NET document model"; book1["Price"] = 10; book1["Authors"] = new List<string> { "Author 1", "Author 2", "Author 3" }; book1["InStock"] = new DynamoDBBool(true); book1["QuantityOnHand"] = 5; batchWrite.AddDocumentToPut(book1); // specify delete item using overload that takes PK. batchWrite.AddKeyToDelete(12345); batchWrite.Execute();
Pour obtenir un exemple pratique, consultez Exemple : opérations par lots à l'aide de l'API du modèle de AWS SDK for .NET document.
Vous pouvez utiliser l'opération batchWrite
pour effectuer des opérations d'insertion et de suppression dans plusieurs tables. Voici les étapes à suivre pour placer ou supprimer plusieurs éléments de plusieurs tables à l'aide du modèle de AWS SDK for .NET document.
-
Vous créez une instance
DocumentBatchWrite
pour chaque table dans laquelle vous voulez insérer ou supprimer plusieurs éléments, comme décrit dans la procédure précédente. -
Créez une instance de l'élément
MultiTableDocumentBatchWrite
et ajoutez-y les objetsDocumentBatchWrite
. -
Exécutez la méthode
MultiTableDocumentBatchWrite.Execute
.
L'exemple de code C# suivant présente les étapes précédentes. L'exemple de code utilise l'opération d'écriture par lots pour effectuer les opérations d'écriture suivantes :
-
Placer un nouvel élément dans l'élément de table
Forum
. -
Placer un élément dans la table
Thread
et supprimer un élément de la même table.
// 1. Specify item to add in the Forum table. Table forum = Table.LoadTable(client, "Forum"); var forumBatchWrite = forum.CreateBatchWrite(); var forum1 = new Document(); forum1["Name"] = "Test BatchWrite Forum"; forum1["Threads"] = 0; forumBatchWrite.AddDocumentToPut(forum1); // 2a. Specify item to add in the Thread table. Table thread = Table.LoadTable(client, "Thread"); var threadBatchWrite = thread.CreateBatchWrite(); var thread1 = new Document(); thread1["ForumName"] = "Amazon S3 forum"; thread1["Subject"] = "My sample question"; thread1["Message"] = "Message text"; thread1["KeywordTags"] = new List<string>{ "Amazon S3", "Bucket" }; threadBatchWrite.AddDocumentToPut(thread1); // 2b. Specify item to delete from the Thread table. threadBatchWrite.AddKeyToDelete("someForumName", "someSubject"); // 3. Create multi-table batch. var superBatch = new MultiTableDocumentBatchWrite(); superBatch.AddBatch(forumBatchWrite); superBatch.AddBatch(threadBatchWrite); superBatch.Execute();