MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявка за рекурсия?

Въпросът за това каква схема би паснала най-добре на типа модел на достъп, който описвате, и отговорът в някои примери говори за това как да се представи йерархия в MongoDB/документна база данни.

Често срещан отговор, който работи за много различни заявки, е къде съхранявате във всеки файл неговото име, размер, пряк родител и масив от всички негови предци.

Това ще направи вашите примерни данни:

db.files.save({ _id: "root"})
db.files.save({ _id: "src", parent: "root", ancestors: ["root"] } )
db.files.save({ _id: "lib", parent: "root", ancestors: ["root"]} )
db.files.save({ _id: "config.cfg", parent: "root", ancestors: ["root"], size: 2310 })
db.files.save({ _id: "file1.js", parent: "src", ancestors: ["root","src"], size: 5039 })
db.files.save({ _id: "file2.js", parent: "src", ancestors: ["root","src"], size: 1299 })

Сега, ако искате да направите заявка за неща като „Файлове в тази директория“ или „всички файлове в тази директория (включително рекурсивно)“, вие правите заявка:

db.files.find( { parent: "root" } )    // all files in /src directory
db.files.find( {ancestors: "root"} )   // all files under /root directory tree

Тъй като трябва да използвате рамка за агрегиране, за да получите неща като сума, заявката за размера на папката ще бъде:

db.files.aggregate([
       {$match:{ancestors:"src"}}, 
       {$group:{
           _id:   "src",
           total_size:  {$sum:"$size"}
          }
       }
]);

За да видите размера на всички папки, които са в основната папка, ще бъде:

db.files.aggregate([
       {$match:{ancestors:"root"}}, 
       {$group:{
           _id:   "root",
           total_size:  {$sum:"$size"}
          }
       }
]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Кога да индексирате, какво да индексирате в Mongoid?

  2. Къде е инсталиран mongoimport на Mac OS X

  3. Mongodb актуализира дълбоко вложен поддокумент

  4. Как да върна булево значение в категория mongodb

  5. MongoDb заявки и system.linq