DocumentDB - Insertar documento
En este capítulo, trabajaremos con documentos reales en una colección. Puede crear documentos utilizando Azure Portal o .Net SDK.
Creación de documentos con Azure Portal
Echemos un vistazo a los siguientes pasos para agregar un documento a su colección.
Step 1 - Agregue una nueva colección de familias del nivel de precios S1 en myfirstdb.
Step 2 - Seleccione la colección Familias y haga clic en la opción Crear documento para abrir la hoja Nuevo documento.
Este es solo un editor de texto simple que le permite escribir cualquier JSON para un nuevo documento.
Step 3 - Como se trata de una entrada de datos sin procesar, ingresemos nuestro primer documento.
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas", "relationship": "father" },
{ "firstName": "Mary Kay", "relationship": "mother" }
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ]
}
],
"location": { "state": "WA", "county": "King", "city": "Seattle"},
"isRegistered": true
}
Cuando ingrese al documento anterior, verá la siguiente pantalla.
Tenga en cuenta que hemos proporcionado una identificación para el documento. El valor de id siempre es obligatorio y debe ser único en todos los demás documentos de la misma colección. Cuando lo deja fuera, DocumentDB generaría automáticamente uno para usted utilizando un GUID o un Identificador único global.
La identificación es siempre una cadena y no puede ser un número, fecha, booleano u otro objeto, y no puede tener más de 255 caracteres.
También observe la estructura jerárquica del documento que tiene algunas propiedades de nivel superior como la identificación requerida, así como lastName y isRegistered, pero también tiene propiedades anidadas.
Por ejemplo, la propiedad principal se proporciona como una matriz JSON, como se indica con los corchetes. También tenemos otra matriz para niños, aunque solo hay un niño en la matriz en este ejemplo.
Step 4 - Haga clic en el botón 'Guardar' para guardar el documento y hemos creado nuestro primer documento.
Como puede ver, se aplicó un bonito formato a nuestro JSON, que divide cada propiedad en su propia línea con sangría con un espacio en blanco para transmitir el nivel de anidación de cada propiedad.
El portal incluye un Explorador de documentos, así que usémoslo ahora para recuperar el documento que acabamos de crear.
Step 5- Elija una base de datos y cualquier colección dentro de la base de datos para ver los documentos de esa colección. Actualmente solo tenemos una base de datos llamada myfirstdb con una colección llamada Familias, las cuales han sido preseleccionadas aquí en los menús desplegables.
De forma predeterminada, el Explorador de documentos muestra una lista sin filtrar de documentos dentro de la colección, pero también puede buscar cualquier documento específico por ID o varios documentos basados en una búsqueda con comodines de un ID parcial.
Hasta ahora solo tenemos un documento en nuestra colección, y vemos su ID en la siguiente pantalla, AndersonFamily.
Step 6 - Haga clic en la identificación para ver el documento.
Crear documentos con .NET SDK
Como sabe, los documentos son solo otro tipo de recurso y ya se ha familiarizado con cómo tratar los recursos utilizando el SDK.
La única gran diferencia entre los documentos y otros recursos es que, por supuesto, no tienen esquemas.
Por tanto, hay muchas opciones. Naturalmente, puede trabajar con gráficos de objetos JSON o incluso cadenas sin formato de texto JSON, pero también puede usar objetos dinámicos que le permitan enlazar propiedades en tiempo de ejecución sin definir una clase en tiempo de compilación.
También puede trabajar con objetos reales de C #, o Entidades como se les llama, que podrían ser sus clases de dominio empresarial.
Comencemos a crear documentos usando .Net SDK. Los siguientes son los pasos.
Step 1 - Cree una instancia de DocumentClient, luego consultaremos la base de datos myfirstdb y luego consultaremos la colección MyCollection, que almacenamos en esta colección de variables privadas para que sea accesible en toda la clase.
private static async Task CreateDocumentClient() {
// Create a new instance of the DocumentClient
using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
'myfirstdb'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First();
await CreateDocuments(client);
}
}
Step 2 - Crear algunos documentos en la tarea CreateDocuments.
private async static Task CreateDocuments(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Create Documents ****");
Console.WriteLine();
dynamic document1Definition = new {
name = "New Customer 1", address = new {
addressType = "Main Office",
addressLine1 = "123 Main Street",
location = new {
city = "Brooklyn", stateProvinceName = "New York"
}, postalCode = "11229", countryRegionName = "United States"
},
};
Document document1 = await CreateDocument(client, document1Definition);
Console.WriteLine("Created document {0} from dynamic object", document1.Id);
Console.WriteLine();
}
El primer documento se generará a partir de este objeto dinámico. Esto puede parecer JSON, pero por supuesto que no lo es. Este es código C # y estamos creando un objeto .NET real, pero no hay una definición de clase. En cambio, las propiedades se infieren de la forma en que se inicializa el objeto.
Tenga en cuenta que no hemos proporcionado una propiedad Id para este documento.
Ahora echemos un vistazo a CreateDocument. Parece el mismo patrón que vimos para crear bases de datos y colecciones.
private async static Task<Document> CreateDocument(DocumentClient client,
object documentObject) {
var result = await client.CreateDocumentAsync(collection.SelfLink, documentObject);
var document = result.Resource;
Console.WriteLine("Created new document: {0}\r\n{1}", document.Id, document);
return result;
}
Step 3- Esta vez llamamos CreateDocumentAsync especificando el SelfLink de la colección a la que queremos agregar el documento. Obtenemos una respuesta con una propiedad de recurso que, en este caso, representa el nuevo documento con sus propiedades generadas por el sistema.
El objeto Documento es una clase definida en el SDK que hereda del recurso y, por lo tanto, tiene todas las propiedades comunes del recurso, pero también incluye las propiedades dinámicas que definen el propio documento sin esquema.
private async static Task CreateDocuments(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Create Documents ****");
Console.WriteLine();
dynamic document1Definition = new {
name = "New Customer 1", address = new {
addressType = "Main Office",
addressLine1 = "123 Main Street",
location = new {
city = "Brooklyn", stateProvinceName = "New York"
}, postalCode = "11229", countryRegionName = "United States"
},
};
Document document1 = await CreateDocument(client, document1Definition);
Console.WriteLine("Created document {0} from dynamic object", document1.Id);
Console.WriteLine();
}
Cuando se compile y ejecute el código anterior, recibirá el siguiente resultado.
**** Create Documents ****
Created new document: 34e9873a-94c8-4720-9146-d63fb7840fad {
"name": "New Customer 1",
"address": {
"addressType": "Main Office",
"addressLine1": "123 Main Street",
"location": {
"city": "Brooklyn", "stateProvinceName": "New York"
},
"postalCode": "11229", "countryRegionName": "United States"
},
"id": "34e9873a-94c8-4720-9146-d63fb7840fad",
"_rid": "Ic8LAMEUVgACAAAAAAAAAA==",
"_ts": 1449812756,
"_self": "dbs/Ic8LAA==/colls/Ic8LAMEUVgA=/docs/Ic8LAMEUVgACAAAAAAAAAA==/",
"_etag": "\"00001000-0000-0000-0000-566a63140000\"",
"_attachments": "attachments/"
}
Created document 34e9873a-94c8-4720-9146-d63fb7840fad from dynamic object
Como puede ver, no hemos proporcionado una identificación, sin embargo, DocumentDB generó esta para nosotros para el nuevo documento.