Bem, um "objeto GridFS" neste contexto significa o nome do objeto armazenado nas coleções GridFS. A distinção é possivelmente melhor explicada pelo
-- local
opção na página de manual do mongofiles. O que você precisa considerar aqui é que o que você fez foi enviar itens com o "mesmo" nome de arquivo usando o utilitário mongofiles. Conforme observado na página de manual desse utilitário, o comportamento padrão do
put
(consulte comandos
) é criar uma nova entrada dentro da loja. Isso pode ser substituído pelo --replace
opção para que qualquer conteúdo existente seja encontrado e substituído pelo novo conteúdo que você criou. Em suma, independentemente de os arquivos conterem conteúdo diferente ou não, você criou várias coisas com o mesmo "Nome do objeto". No que diz respeito ao utilitário mongofiles, ele só sabe buscar pelo "Nome do objeto", então ele apenas recuperará o primeiro que encontrar, por suas regras.
Agora, na maioria das implementações de API do GridFS, o
get
real as operações geralmente são feitas por _id
. Cada "Objeto" que você criou dessa forma ainda tem seu próprio _id
exclusivo valor, portanto, quando isso for aplicado, você poderá obter o "objeto" desejado. Algumas implementações de API adicionam métodos de tipo de consulta adicionais para localizar por "nome do arquivo" ou outras informações de metadados. Mas, na maioria das vezes, eles não se incomodam, pois são apenas padrão
.find()
ou .findOne()
operações em qualquer coleção que contenham os metadados e as referências de conteúdo ( fs.files por padrão ). Isso fornece uma quantidade mais do que razoável de maneiras de "encontrar" um objeto específico e emitir que _id
valor através do get
interface dessa API. Então, enquanto
mongofiles
é um bom utilitário para fazer operações básicas do tipo CRUD a partir da linha de comando, é apenas um utilitário e não a implementação principal de "como fazer". Assim como um utilitário ele fornece uma forma "conveniente" de configurar e obter objetos, utilizando a parte "nome do arquivo" do identificador do objeto. Também vale a pena notar que você deve realmente trate um armazenamento GridFS como um sistema de arquivos e mantenha seus "nomes de arquivos" exclusivos, exatamente como seria necessário em um sistema de arquivos.
Mas quanto aos
mongofiles
utilitário, o "nome" é tudo o que você precisa para recuperar informações. Tente não fazer isso, ou realmente use a API do idioma escolhido para fazer o trabalho.