MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB - mongofiles

Eh bien, un "objet GridFS" dans ce contexte signifie le nom de l'objet stocké dans les collections GridFS. La distinction est peut-être mieux expliquée par le -- locale option sur la page de manuel de mongofiles.

Ce que vous devez considérer ici, c'est que vous avez soumis des éléments avec le "même" nom de fichier à l'aide de l'utilitaire mongofiles. Comme indiqué dans la page de manuel de cet utilitaire, le comportement par défaut pour le put (voir commandes ) est de créer une nouvelle entrée dans le magasin. Cela peut être remplacé par le --replace afin que tout contenu existant soit trouvé et remplacé par le nouveau contenu que vous avez créé.

En bref, que les fichiers aient un contenu différent ou non, vous avez créé plusieurs choses avec le même "Nom d'objet". En ce qui concerne l'utilitaire mongofiles, il ne sait comment récupérer que par le "nom de l'objet", il ne récupérera donc que le premier qu'il trouve, selon ses règles.

Désormais, dans la plupart des implémentations d'API de GridFS, le véritable get les opérations sont généralement effectuées par _id . Chaque "Objet" que vous avez créé de cette manière a toujours son propre _id unique valeur, donc quand cela est appliqué, vous pouvez obtenir "l'objet" que vous voulez.

Certaines implémentations d'API ajoutent des méthodes de type de requête supplémentaires afin de rechercher par "nom de fichier" ou d'autres informations de métadonnées. Mais la plupart du temps, ils ne dérangent pas car ce ne sont vraiment que des .trouver() ou .findOne() les opérations sur n'importe quelle collection contiennent les métadonnées et les références de contenu ( fs.files par défaut ). Cela fournit un nombre plus que raisonnable de façons de "trouver" un objet particulier et d'émettre ce _id valeur via get l'interface de cette API.

Ainsi, tandis que mongofiles est un bon utilitaire pour effectuer des opérations de base de type CRUD à partir de la ligne de commande, il s'agit simplement d'un utilitaire et non de l'implémentation principale de "comment le faire". Ainsi, en tant qu'utilitaire, il fournit une forme "pratique" de définition et d'obtention d'objets, en utilisant la partie "nom de fichier" de l'identifiant d'objet.

Il convient également de noter que vous devriez traitez vraiment un magasin GridFS comme un système de fichiers et gardez vos "noms de fichiers" uniques comme cela serait requis dans un système de fichiers.

Mais comme pour les mongofiles utilitaire, le "nom" est tout ce que vous avez à faire pour récupérer les informations. Essayez de ne pas faire cela, ou utilisez plutôt l'API de langage de votre choix pour faire le travail à la place.