- DocumentDB 教程
- DocumentDB - 首頁
- DocumentDB - 簡介
- DocumentDB - 優勢
- DocumentDB - 環境設定
- DocumentDB - 建立賬戶
- DocumentDB - 連線賬戶
- DocumentDB - 建立資料庫
- DocumentDB - 列出資料庫
- DocumentDB - 刪除資料庫
- DocumentDB - 建立集合
- DocumentDB - 刪除集合
- DocumentDB - 插入文件
- DocumentDB - 查詢文件
- DocumentDB - 更新文件
- DocumentDB - 刪除文件
- DocumentDB - 資料建模
- DocumentDB - 資料型別
- DocumentDB - 限制記錄
- DocumentDB - 排序記錄
- DocumentDB - 索引記錄
- DocumentDB - 地理空間資料
- DocumentDB - 分割槽
- DocumentDB - 資料遷移
- DocumentDB - 訪問控制
- DocumentDB - 資料視覺化
- DocumentDB 有用資源
- DocumentDB - 快速指南
- DocumentDB - 有用資源
- DocumentDB - 討論
DocumentDB - 查詢文件
在 DocumentDB 中,我們實際上使用 SQL 來查詢文件,因此本章將重點介紹使用 DocumentDB 中特殊的 SQL 語法進行查詢。但是,如果您正在進行 .NET 開發,也可以使用 LINQ 提供程式,該程式可以根據 LINQ 查詢生成相應的 SQL。
使用門戶查詢文件
Azure 門戶具有一個查詢資源管理器,允許您對 DocumentDB 資料庫執行任何 SQL 查詢。
我們將使用查詢資源管理器演示查詢語言的許多不同功能和特性,從最簡單的查詢開始。
步驟 1 - 在資料庫面板中,單擊以開啟查詢資源管理器面板。
請記住,查詢在集合的範圍內執行,因此查詢資源管理器允許您在此下拉列表中選擇集合。
步驟 2 - 選擇前面使用門戶建立的 Families 集合。
查詢資源管理器將開啟此簡單的查詢 SELECT * FROM c,它只是從集合中檢索所有文件。
步驟 3 - 單擊“執行查詢”按鈕執行此查詢。然後,您將看到完整的文件已在“結果”面板中檢索。
使用 .Net SDK 查詢文件
以下是使用 .Net SDK 執行一些文件查詢的步驟。
在此示例中,我們想要查詢剛剛新增的新建立的文件。
步驟 1 - 呼叫 CreateDocumentQuery,透過其 SelfLink 和查詢文字傳遞要對其執行查詢的集合。
private async static Task QueryDocumentsWithPaging(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Query Documents (paged results) ****");
Console.WriteLine();
Console.WriteLine("Quering for all documents");
var sql = "SELECT * FROM c";
var query = client.CreateDocumentQuery(collection.SelfLink, sql).AsDocumentQuery();
while (query.HasMoreResults) {
var documents = await query.ExecuteNextAsync();
foreach (var document in documents) {
Console.WriteLine(" Id: {0}; Name: {1};", document.id, document.name);
}
}
Console.WriteLine();
}
此查詢也返回整個集合中的所有文件,但我們不像以前那樣在 CreateDocumentQuery 上呼叫 .ToList,這將發出儘可能多的請求以在一行程式碼中下載所有結果。
步驟 2 - 相反,呼叫 AsDocumentQuery,此方法返回一個具有 HasMoreResults 屬性的查詢物件。
步驟 3 - 如果 HasMoreResults 為 true,則呼叫 ExecuteNextAsync 獲取下一塊,然後轉儲該塊的所有內容。
步驟 4 - 如果您願意,也可以使用 LINQ 而不是 SQL 進行查詢。在這裡,我們在 q 中定義了一個 LINQ 查詢,但它直到我們對其執行 .ToList 才會執行。
private static void QueryDocumentsWithLinq(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Query Documents (LINQ) ****");
Console.WriteLine();
Console.WriteLine("Quering for US customers (LINQ)");
var q =
from d in client.CreateDocumentQuery<Customer>(collection.DocumentsLink)
where d.Address.CountryRegionName == " United States"
select new {
Id = d.Id,
Name = d.Name,
City = d.Address.Location.City
};
var documents = q.ToList();
Console.WriteLine("Found {0} UK customers", documents.Count);
foreach (var document in documents) {
var d = document as dynamic;
Console.WriteLine(" Id: {0}; Name: {1}; City: {2}", d.Id, d.Name, d.City);
}
Console.WriteLine();
}
SDK 將我們的 LINQ 查詢轉換為 DocumentDB 的 SQL 語法,根據我們的 LINQ 語法生成 SELECT 和 WHERE 子句。
步驟 5 - 現在從 CreateDocumentClient 任務呼叫上述查詢。
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);
await QueryDocumentsWithPaging(client);
QueryDocumentsWithLinq(client);
}
}
執行上述程式碼時,您將收到以下輸出。
**** Query Documents (paged results) **** Quering for all documents Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1; Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1; **** Query Documents (LINQ) **** Quering for US customers (LINQ) Found 2 UK customers Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1; City: Brooklyn Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1; City: Brooklyn