sql >> データベース >  >> NoSQL >> MongoDB

MongoDB GridFSをクエリしますか?

    GridFSは、ファイルごとに多数のチャンクを格納することで機能します。このようにして、ファイル全体をRAMに保存しなくても、非常に大きなファイルを配信および保存できます。また、これにより、最大ドキュメントサイズよりも大きいファイルを保存できます。推奨されるチャンクサイズは256kbです。

    ファイルメタデータフィールドを使用して、追加のファイル固有のメタデータを保存できます。これは、メタデータを別のドキュメントに保存するよりも効率的です。これは正確な要件に大きく依存しますが、一般に、メタデータフィールドは多くの柔軟性を提供します。より明白なメタデータのいくつかは、すでにfs.filesの一部であることに注意してください。 ドキュメント、デフォルト:

    > db.fs.files.findOne();
    {
        "_id" : ObjectId("4f9d4172b2ceac15506445e1"),
        "filename" : "2e117dc7f5ba434c90be29c767426c29",
        "length" : 486912,
        "chunkSize" : 262144,
        "uploadDate" : ISODate("2011-10-18T09:05:54.851Z"),
        "md5" : "4f31970165766913fdece5417f7fa4a8",
        "contentType" : "application/pdf"
    }
    

    GridFSから実際にファイルを読み取るには、fs.filesからファイルドキュメントをフェッチする必要があります。 およびfs.chunksからのチャンク 。これを行う最も効率的な方法は、これをチャンクごとにクライアントにストリーミングすることです。これにより、ファイル全体をRAMにロードする必要がなくなります。 chunks コレクションの構造は次のとおりです。

    > db.fs.chunks.findOne({}, {"data" :0});
    {
        "_id" : ObjectId("4e9d4172b2ceac15506445e1"),
        "files_id" : ObjectId("4f9d4172b2ceac15506445e1"),
        "n" : 0, // this is the 0th chunk of the file
        "data" : /* loads of data */
    }
    

    metadataを使用する場合 fs.filesのフィールド クエリについては、ドット表記を理解していることを確認してください。例:

    > db.fs.files.find({"metadata.OwnerId": new ObjectId("..."), 
                        "metadata.ImageWidth" : 280});
    

    また、クエリでexplain()を使用してインデックスを使用できることを確認してください 。



    1. MongoDB insertMany()

    2. 別のタイムゾーンで年月日ごとに集計する方法

    3. NodeJsアプリケーションとモジュール間でMongodbへの接続を適切に再利用する方法

    4. MongoDBのフィールドの実際のタイプを返します