Ich habe ein Blogging-System, das hochgeladene Dateien im GridFS-System speichert. Problem ist, ich verstehe nicht, wie man es abfragt!
Ich benutze Mongoose mit NodeJS, die GridFS noch nicht unterstützt, also benutze ich das eigentliche mongodb-Modul für die GridFS-Operationen. Es gibt SEEM nicht, um die Metadaten der Dateien abzufragen, wie Sie Dokumente in einer normalen Sammlung machen.
Wäre es sinnvoll, die Metadaten in einem Dokument zu speichern, das auf die GridFS-Objekt-ID verweist? leicht abfragen zu können?
Jede Hilfe wäre sehr geschätzt, ich bin irgendwie festgefahren: /
GridFS funktioniert durch Speichern einer Anzahl von Blöcken für jede Datei. Auf diese Weise können Sie sehr große Dateien bereitstellen und speichern, ohne die gesamte Datei im Arbeitsspeicher ablegen zu müssen. Außerdem können Sie damit Dateien speichern, die größer als die maximale Dokumentgröße sind. Die empfohlene Chunk-Größe ist 256 KB.
Das Dateimetadatenfeld kann zum Speichern zusätzlicher dateispezifischer Metadaten verwendet werden, was effizienter sein kann als das Speichern der Metadaten in einem separaten Dokument. Dies hängt stark von Ihren genauen Anforderungen ab, aber das Metadatenfeld bietet im Allgemeinen viel Flexibilität. Beachten Sie, dass einige der offensichtlicheren Metadaten bereits standardmäßig im Dokument fs.files
enthalten sind:
Um die Datei tatsächlich aus GridFS zu lesen, müssen Sie das Dateidokument von fs.files
und die Teile von fs.chunks
holen. Am effizientesten ist es, dies chunkweise an den Client zu übertragen, sodass Sie nicht die gesamte Datei in den Arbeitsspeicher laden müssen. Die chunks
-Sammlung hat die folgende Struktur:
Wenn Sie das metadata
-Feld von fs.files
für Ihre Abfragen verwenden möchten, vergewissern Sie sich, dass Sie die verstehen Punktnotation , zB
Stellen Sie außerdem sicher, dass Ihre Abfragen einen Index mit explain()
verwenden können.
Wie die Spezifikation sagt, können Sie im Metadatenfeld speichern, was Sie wollen.
>So sieht ein Dokument aus der Dateisammlung aus:
Pflichtfelder
%Vor%Optionale Felder
%Vor%Speichern Sie also alles, was Sie wollen, in den Metadaten und fragen Sie es normalerweise wie in MongoDB ab:
%Vor% Ich weiß, dass die Frage nicht nach der Java-Methode für die Abfrage von Metadaten fragt, aber hier ist die Annahme, dass Sie gender
als Metadatenfeld hinzufügen: