Je travaille à la création d'une visionneuse web pour MongoDB et je veux lister les buckets disponibles dans GridFS. Si je n'obtiens pas le nom du seau, je ne serai pas en mesure de lister les fichiers contenus dans le seau. J'ai cherché dans la documentation Mongo-java mais je n'ai pas trouvé d'API pour obtenir les noms des seaux. Existe-t-il une API java disponible ou une solution alternative pour obtenir la liste des noms de seaux ?
Réponse
Trop de publicités?Je ne pense pas qu'il y ait un moyen direct d'obtenir la liste des seaux. Ce n'est probablement pas souvent nécessaire, car vous devez spécifier explicitement les buckets, donc vous allez généralement dans la base de données en sachant ce qu'il faut chercher.
Une solution quelque peu maladroite consiste à inspecter les noms des collections (bien sûr, si quelqu'un étiquetait deux collections ".chunks" et ".files", les résultats seraient probablement trompeurs) :
GridFS fs = new GridFS(db, "buck");
fs.createFile();
fs = new GridFS(db, "bucket");
fs.createFile();
fs = new GridFS(db, "test");
fs.createFile();
Set<String> colls = db.getCollectionNames();
for(String collName : colls) {
if(collName.endsWith(".chunks")) {
String potentialBucketName = collName.substring(0,collName.indexOf(".chunks"));
if(colls.contains(potentialBucketName+".files")) {
System.out.println(potentialBucketName + " is a bucket");
}
}
}
donne les résultats :
buck is a bucket
bucket is a bucket
test is a bucket