Si je comprends bien, lorsque vous saisissez quelque chose dans GridFS, il entre dans deux collections différentes sous le capot. Un pour les morceaux bruts de données et un pour les fichiers de métadonnées.
D’après ce que j’ai compris de la documentation de MongoDB, il est également possible d’extraire un document de GridFS avec un identifiant ou un nom.
var gs = new mongodb.GridStore(db, "test.png", "w", { "content_type": "image/png", "metadata":{ "author": "Daniel" }, "chunk_size": 1024*4
});
Et si je veux obtenir un sous-ensemble de documents de GridFS? Par exemple, si je veux tous les GridStores avec:
métadonnées: {author: “Daniel”}
Pourquoi ne puis-je pas utiliser les requêtes standard mongo {field: somevalue} pour récupérer des documents de cette manière?
Est-ce que quelqu’un sait comment cela peut être fait? J’utilise l’API javascript sur node.js.
Vous pouvez interroger la collection db.files
comme n’importe quelle autre collection:
db.collection('fs.files') .find({ 'metadata.author' : 'Daniel' }) .toArray(function(err, files) { if (err) throw err; files.forEach(function(file) { var gs = new mongodb.GridStore(db, file._id, 'r'); ... }); });
Bien que vous forEach
utiliser async.each
ou l’une des autres méthodes async.*
place de plain forEach
.