2015-01-02 2 views
18

Похоже, что 'select count (*) from c' в SQL-запросах, разрешенных documentdb на сайте azure, и через explorer documentdb (https://studiodocumentdb.codeplex.com/) не поддерживается. На сегодняшний день единственный способ получить счетчик записей, который я нашел, - это код (см. Ниже). Тем не менее, в нашей коллекции сейчас достаточно файлов, и это сбой. Есть ли способ подсчитать, сколько документов в коллекции работает больше, чем мое решение?Получить счетчик записей в Azure DocumentDb

DocumentClient dc = GetDocumentDbClient(); 
var databaseCount = dc.CreateDatabaseQuery().ToList(); 
Database azureDb = dc.CreateDatabaseQuery().Where(d => d.Id == Constants.WEATHER_UPDATES_DB_NAME).ToArray().FirstOrDefault(); 

var collectionCount = dc.CreateDocumentCollectionQuery(azureDb.SelfLink).ToList(); 

DocumentCollection update = dc.CreateDocumentCollectionQuery(azureDb.SelfLink).Where(c => c.Id == "WeatherUpdates").ToArray().FirstOrDefault(); 

var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT * FROM c").ToList(); 

MessageBox.Show("Databases: " + databaseCount.Count().ToString() + Environment.NewLine 
       +"Collections: " + collectionCount.Count().ToString() + Environment.NewLine 
       + "Documents: " + documentCount.Count().ToString() + Environment.NewLine, 
       "Totals", MessageBoxButtons.OKCancel); 

ответ

7

До реализации ключевого слова «счет» вы должны выполнить свой запрос в процедуре хранения на сервере. Будьте осторожны, чтобы не получить все столбцы/свойства в вашем запросе, если вы хотите только подсчет.

Выберите только идентификатор;

dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c") 
0

В настоящее время не существует. У меня был подобный сценарий, и мы закончили тем, что добавили счетчик атрибута документа, который обновляется каждый раз, когда документ добавляется или удаляется. Вы даже можете сделать эти два шага как часть процедуры магазина или триггера, если хотите атомарность.

+0

Кстати, это и другие подобные функции находятся в стадии рассмотрения группы docdb продукта. Вы можете пойти и проголосовать за это. http://feedback.azure.com/forums/263030-documentdb/suggestions/6333963-add-support-for-aggregate-functions-like-count-su –

+0

По состоянию на 29 июля 2016 года они начали: «У нас есть начал работу над общей поддержкой и обновит этот элемент обратной связи, поскольку у нас есть дополнительная информация ». – jeremy

0

Мой счетчик кода решение также работает ... когда я просто выбрал идентификатор как папа Ours указал, :) Для того, чтобы получить мой оригинальный пост, чтобы работать, замените эту строку:

var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT * FROM c").ToList(); 

с этой линией:

var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT id FROM c").ToList() 

Я до сих пор, как идея хранимой процедуры, как он будет работать в documentdb студии (действительно круто проект :)) - https://studiodocumentdb.codeplex.com/

8

Просто для примера - вот пример Count Stored Procedure via JS с продолжением поддержки.

А вот еще один инструмент для DocumentDb, что довольно опрятно: https://github.com/mingaliu/DocumentDBStudio/releases

Upd марта 2017: В последнем DDB SDK см DDB Aggregates press release есть полная поддержка основных агрегатов без GROUP BY, хотя (на данный момент). Вот GIT Repo с примерами: https://github.com/arramac/azure-documentdb-dotnet/tree/master/samples/code-samples/Queries

18

На самом деле работает на данный момент:

SELECT COUNT (c.id) FROM с

+4

Не работает с моей 90 ГБ DB. – pookie

+4

Это дает ненадежную ценность. – Youngjae

+1

Это не сработало для меня. Вам нужно добавить VALUE перед COUNT (c.id), например, как сказал Михей Уильямсон, чтобы этот запрос работал. –

36

Это стало возможным в 2017 году нашего господина.

SELECT VALUE COUNT(1) FROM c

[ 1234 ]

+12

Имейте в виду, что в течение месяца 7 в этом году это ест потенциально тысячи RU. Это тоже довольно медленно. –

+1

Примечание: 16 400 записей в одной секции потребляют 535 RU. – Youngjae

+6

довольно абсурдно, сколько RU требуется для сканирования того, что должно быть индексом. – JJS

1

Это возможно в том же, как вы пишете SQL запрос теперь,

SELECT VALUE COUNT(1) FROM myCollection 

enter image description here

Примечание: COUNT (1) не будет работайте за огромные наборы данных.

Вы можете прочитать больше о поддерживаемых запросах от here

Смежные вопросы