DocumentDB - Belge Ekle
Bu bölümde, bir koleksiyondaki gerçek belgelerle çalışacağız. Azure portalı veya .Net SDK kullanarak belgeler oluşturabilirsiniz.
Azure Portal ile Belge Oluşturma
Koleksiyonunuza belge eklemek için aşağıdaki adımlara bir göz atalım.
Step 1 - Myfirstdb'de yeni koleksiyon Aileleri S1 fiyatlandırma katmanını ekleyin.
Step 2 - Aile koleksiyonunu seçin ve Yeni Belge dikey penceresini açmak için Belge Oluştur seçeneğine tıklayın.
Bu, yeni bir belge için herhangi bir JSON yazmanıza izin veren basit bir metin düzenleyicidir.
Step 3 - Bu ham veri girişi olduğu için ilk belgemize girelim.
{
"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
}
Yukarıdaki belgeye girdiğinizde karşınıza aşağıdaki ekran çıkacaktır.
Belge için bir kimlik sağladığımıza dikkat edin. İd değeri her zaman gereklidir ve aynı koleksiyondaki diğer tüm belgelerde benzersiz olmalıdır. Bunu dışarıda bıraktığınızda, DocumentDB bir GUID veya Küresel Olarak Benzersiz Tanımlayıcı kullanarak sizin için otomatik olarak bir tane oluşturur.
Kimlik her zaman bir dizedir ve sayı, tarih, Boole veya başka bir nesne olamaz ve 255 karakterden uzun olamaz.
Ayrıca, gerekli id, lastName ve isRegistered gibi birkaç üst düzey özelliğe sahip, ancak aynı zamanda yuvalanmış özelliklere sahip olan belgenin hiyerarşik yapısına da dikkat edin.
Örneğin, parent özelliği, köşeli parantezlerle belirtildiği gibi bir JSON dizisi olarak sağlanır. Bu örnekteki dizide yalnızca bir çocuk olmasına rağmen, çocuklar için de başka bir dizimiz var.
Step 4 - Belgeyi kaydetmek için 'Kaydet' düğmesine tıklayın ve ilk belgemizi oluşturduk.
Gördüğünüz gibi, her mülkün iç içe geçme düzeyini iletmek için her mülkü kendi satırında beyaz boşlukla girintili olarak bölen JSON'umuza güzel biçimlendirme uygulandı.
Portal bir Belge Gezgini içerir, bu yüzden şimdi bunu az önce oluşturduğumuz belgeyi almak için kullanalım.
Step 5- Bir veritabanını ve bu koleksiyondaki belgeleri görüntülemek için veritabanındaki herhangi bir koleksiyonu seçin. Şu anda, her ikisi de açılır menülerde önceden seçilmiş olan, Families adlı bir koleksiyona sahip, myfirstdb adlı tek bir veritabanımız var.
Varsayılan olarak, Belge Gezgini, koleksiyon içindeki belgelerin filtrelenmemiş bir listesini görüntüler, ancak herhangi bir belgeyi kimliğe göre veya kısmi bir kimliğin joker karakter aramasına göre birden çok belgeyi de arayabilirsiniz.
Koleksiyonumuzda şu ana kadar tek bir belgemiz var ve kimliğini aşağıdaki ekranda AndersonFamily'de görüyoruz.
Step 6 - Belgeyi görüntülemek için ID'ye tıklayın.
.NET SDK ile Belgeler Oluşturma
Belgelerin sadece başka bir kaynak türü olduğunu bildiğiniz ve SDK'yı kullanarak kaynakları nasıl ele alacağınızı zaten bildiğiniz gibi.
Belgeler ile diğer kaynaklar arasındaki en büyük fark, elbette şemasız olmalarıdır.
Bu nedenle birçok seçenek var. Doğal olarak, yalnızca JSON nesne grafikleri veya hatta JSON metninin ham dizeleri üzerinde çalışabilirsiniz, ancak derleme zamanında bir sınıf tanımlamadan çalışma zamanında özelliklere bağlanmanıza izin veren dinamik nesneleri de kullanabilirsiniz.
Ayrıca gerçek C # nesneleriyle veya çağrıldıkları şekliyle Varlıklar ile çalışabilirsiniz, bunlar iş alanı sınıflarınız olabilir.
Net SDK kullanarak döküman oluşturmaya başlayalım. Adımlar aşağıdadır.
Step 1 - DocumentClient'i örnekleyin, daha sonra myfirstdb veritabanını ve ardından bu özel değişken koleksiyonunda sakladığımız MyCollection koleksiyonunu sorgulayacağız, böylece sınıf boyunca erişilebilir.
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 - CreateDocuments görevinde bazı belgeler oluşturun.
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();
}
İlk belge bu dinamik nesneden oluşturulacaktır. Bu JSON'a benzeyebilir, ama elbette değil. Bu C # kodu ve gerçek bir .NET nesnesi oluşturuyoruz, ancak sınıf tanımı yok. Bunun yerine, özellikler, nesnenin başlatılma biçiminden çıkarılır.
Bu belge için bir Kimlik özelliği sağlamadığımıza dikkat edin.
Şimdi CreateDocument'e bir göz atalım. Veritabanları ve koleksiyonlar oluşturmak için gördüğümüz modelle aynı görünüyor.
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- Bu sefer CreateDocumentAsync'i çağırarak belgeyi eklemek istediğimiz koleksiyonun SelfLink'ini belirledik. Bu durumda, sistem tarafından oluşturulan özellikleriyle yeni belgeyi temsil eden bir kaynak özelliğine sahip bir yanıtı geri alıyoruz.
Belge nesnesi, SDK'da kaynaktan miras alan tanımlanmış bir sınıftır ve bu nedenle tüm ortak kaynak özelliklerine sahiptir, ancak aynı zamanda şemadan bağımsız belgenin kendisini tanımlayan dinamik özellikleri de içerir.
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();
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde aşağıdaki çıktıyı alacaksınız.
**** 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
Gördüğünüz gibi, bir kimlik sağlamadık, ancak DocumentDB bunu bizim için yeni belge için oluşturdu.