sql >> Database >  >> NoSQL >> MongoDB

MongoDB GridFS opvragen?

GridFS werkt door een aantal chunks op te slaan voor elk bestand. Op deze manier kunt u zeer grote bestanden aanleveren en opslaan zonder dat u het hele bestand in het RAM hoeft op te slaan. Hierdoor kunt u ook bestanden opslaan die groter zijn dan de maximale documentgrootte. De aanbevolen chunkgrootte is 256kb.

Het bestandsmetadataveld kan worden gebruikt om aanvullende bestandsspecifieke metadata op te slaan, wat efficiënter kan zijn dan het opslaan van de metadata in een apart document. Dit hangt sterk af van uw exacte vereisten, maar het metadataveld biedt over het algemeen veel flexibiliteit. Houd er rekening mee dat sommige van de meer voor de hand liggende metadata al deel uitmaken van de fs.files document, standaard:

> 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"
}

Om het bestand daadwerkelijk uit GridFS te lezen, moet u het bestandsdocument ophalen van fs.files en de chunks van fs.chunks . De meest efficiënte manier om dat te doen is om dit stuk voor stuk naar de client te streamen, zodat u niet het hele bestand in het RAM hoeft te laden. De chunks collectie heeft de volgende structuur:

> 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 */
}

Als u de metadata . wilt gebruiken veld van fs.files voor uw vragen, zorg ervoor dat u de puntnotatie begrijpt, bijvoorbeeld

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

zorg er ook voor dat uw zoekopdrachten een index kunnen gebruiken met behulp van explain() .



  1. Hoe de client een zeer groot bestand te laten downloaden dat on-the-fly wordt gegenereerd?

  2. Verbinding maken met externe redis-server

  3. Rails, Sidekiq - Redis NOAUTH

  4. Waarom worden gegevens opgeslagen met rare sleutels in Redis bij gebruik van Jedis met Spring Data?