web-dev-qa-db-fra.com

Obtenir le nombre d'enregistrements dans Azure DocumentDb

Il semble que "select count (*) from c" dans les requêtes SQL autorisées par documentdb sur le site Azure et via l'explorateur documentdb ( https://studiodocumentdb.codeplex.com/ ) n'est pas pris en charge. À ce jour, le seul moyen d'obtenir un nombre d'enregistrements que j'ai trouvé est d'utiliser le code (voir ci-dessous). Cependant, il y a suffisamment de fichiers dans notre collection maintenant que cela se bloque. Existe-t-il un moyen de savoir combien de documents d'une collection fonctionnent mieux que ma solution?

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); 
26
ProgramTheWorld

Jusqu'à la mise en œuvre du mot clé "count", vous devez effectuer votre requête dans une procédure de stockage sur le serveur. Veillez à ne pas inclure toutes les colonnes/propriétés dans votre requête si vous voulez seulement un nombre. 

Sélectionnez uniquement l'identifiant comme;

  dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c")
10
Papa Ours

Travaille actuellement à ce point:

CHOISIR COUNT (c.id) FROM c

21
Mike Katchourine

Pour récapituler - voici un exemple de Compter une procédure stockée via JS avec prise en charge de la continuation. 

Et voici un autre outil pour DocumentDb assez soigné: https://github.com/mingaliu/DocumentDBStudio/releases

Mise à jour mars 2017: Dans le dernier SDK DDB, voir le communiqué de presse de DDB Aggregates il existe une prise en charge complète des agrégats de base, sans GROUP BY (pour l'instant). Voici GIT Repo avec des exemples: https://github.com/arramac/Azure-documentdb-dotnet/tree/master/samples/code-samples/Queries

9
zmische

Ceci est possible de la même manière que vous écrivez une requête SQL maintenant,

SELECT VALUE COUNT(1) FROM myCollection

 enter image description here

NOTE: COUNT (1) ne fonctionnera pas pour des jeux de données volumineux.

Vous pouvez en savoir plus sur les requêtes prises en charge à partir de ici

5
Sajeetharan

N'existe pas actuellement. J'ai eu un scénario similaire et nous avons fini par ajouter un compteur à un attribut de document qui est mis à jour chaque fois qu'un document est ajouté ou supprimé. Vous pouvez même faire ces deux étapes dans le cadre d'une procédure de stockage ou d'un déclencheur si vous voulez l'atomicité.

0
Luis Delgado

Ma solution de comptage de codes fonctionne également ... une fois que je venais de sélectionner l'identifiant, comme l'a souligné Papa Ours :) Pour que mon message d'origine fonctionne, remplacez cette ligne:

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

avec cette ligne:

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

J'aime toujours l'idée de la procédure stockée, car elle fonctionnera dans le studio documentdb (projet vraiment cool :)) - https://studiodocumentdb.codeplex.com/

0
ProgramTheWorld