summaryrefslogtreecommitdiff
path: root/week-7/final7/solve.rb
diff options
context:
space:
mode:
Diffstat (limited to 'week-7/final7/solve.rb')
-rw-r--r--week-7/final7/solve.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/week-7/final7/solve.rb b/week-7/final7/solve.rb
new file mode 100644
index 0000000..04684a8
--- /dev/null
+++ b/week-7/final7/solve.rb
@@ -0,0 +1,38 @@
+require 'rubygems'
+require 'bundler'
+Bundler.require
+
+def main
+ client = Mongo::MongoClient.new
+ db = client['final7']
+ images_collection = db['images']
+ albums_collection = db['albums']
+
+ albums = albums_collection.aggregate([
+ { '$unwind': '$images' },
+ { '$project': { '_id': '$images' } },
+ { '$group': { '_id': '$_id', count: { '$sum': 1 } } },
+ ])
+ used_images = albums.reduce({}) do |memo, image|
+ memo[image['_id']] = true
+ memo
+ end
+ images = images_collection.find().to_a
+ deleted = 0
+ images.each do |image|
+ image_id = image['_id']
+ if used_images.key?(image_id) == false
+ puts "Deleting: #{image_id}"
+ images_collection.remove("_id": image_id)
+ deleted += 1
+ end
+ end
+ puts "USED: #{used_images.size}"
+ puts "DELETED: #{deleted}"
+ puts "TOTAL: #{images_collection.find.count}"
+
+ tagged_kittens = images_collection.find({ 'tags': 'kittens' }).count()
+ puts "Kittens: #{tagged_kittens}"
+end
+
+main