DocumentDB - Ограничение записей
Microsoft недавно добавила ряд улучшений в способ запроса Azure DocumentDB, например ключевое слово TOP для грамматики SQL, благодаря чему запросы выполняются быстрее и потребляют меньше ресурсов, увеличены ограничения для операторов запросов и добавлена поддержка дополнительных операторов LINQ в .NET SDK.
Давайте посмотрим на простой пример, в котором мы получим только первые две записи. Если у вас есть несколько записей и вы хотите получить только некоторые из них, вы можете использовать ключевое слово Top. В этом примере у нас есть много записей о землетрясениях.
Теперь мы хотим показать только первые две записи.
Step 1 - Перейдите в проводник запросов и запустите этот запрос.
SELECT * FROM c
WHERE c.magnitude > 2.5
Вы увидите, что он получил четыре записи, потому что мы еще не указали ключевое слово TOP.
Step 2- Теперь используйте ключевое слово TOP с тем же запросом. Здесь мы указали ключевое слово TOP, а «2» означает, что нам нужны только две записи.
SELECT TOP 2 * FROM c
WHERE c.magnitude > 2.5
Step 3 - Теперь запустите этот запрос, и вы увидите, что извлекаются только две записи.
Точно так же вы можете использовать ключевое слово TOP в коде с помощью .Net SDK. Ниже приводится реализация.
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 TOP 3 * 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(" PublicId: {0}; Magnitude: {1};", document.publicid,
document.magnitude);
}
}
Console.WriteLine();
}
Ниже приводится задача CreateDocumentClient, в которой создаются экземпляры DocumentClient и базы данных землетрясений.
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 =
'earthquake'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'earthquakedata'").AsEnumerable().First();
await QueryDocumentsWithPaging(client);
}
}
Когда приведенный выше код скомпилирован и выполнен, вы увидите, что извлекаются только три записи.
**** Query Documents (paged results) ****
Quering for all documents
PublicId: 2015p947400; Magnitude: 2.515176918;
PublicId: 2015p947373; Magnitude: 1.506774108;
PublicId: 2015p947329; Magnitude: 1.593394461;