MAPREDUCE Elite: Difference between revisions
From NoSQLZoo
No edit summary |
No edit summary |
||
Line 58: | Line 58: | ||
</pre> | </pre> | ||
<div class="ans"> | <div class="ans"> | ||
from bson.code import Code; temp = db.systems.map_reduce( query={"allegiance":{"$exists": 1}}, map=Code("function(){emit(this.allegiance,this.faction)}"), reduce=Code("""function(key,values){return values.length}"""), out={"inline":1} );pp.pprint( temp['results'] ) | |||
</div> | </div> | ||
</div> | </div> |
Revision as of 15:40, 23 July 2015
#ENCODING import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-16') #MONGO from pymongo import MongoClient client = MongoClient() client.elite.authenticate('scott','tiger') db = client['elite'] #PRETTY import pprint pp = pprint.PrettyPrinter(indent=4)
Introducing the elite database **WORK IN PROGRESS
These questions will introduce the "elite" database, which contains data about the video game Elite Dangerous
There are two collections, commodities
and systems
. Inside systems
there is are nested documents called stations
A system has many stations, and a station has many trade listings
Read more about the structure here: Elite Document Structure
Questions
commodities
collection contains the name and average price of each commodity.There are 99 commodities and 15 categories.
Find the average price of each category, round to the nearest whole number
from bson.code import Code pp.pprint( db.commodities.find_one() )
from bson.code import Code;temp = db.commodities.map_reduce( map=Code("function(){emit(this.category,this.average_price)}"), reduce=Code("""function(key,values){var total = 0;for (var i = 0; i < values.length; i++){total += values[i];}return Math.round(total/values.length);} """),out={"inline":1} );pp.pprint(temp['results'])
from bson.code import Code; temp = db.systems.map_reduce( query={"allegiance":{"$exists": 1}}, map=Code("function(){emit(this.allegiance,this.faction)}"), reduce=Code("""function(key,values){return values.length}"""), out={"inline":1} );pp.pprint( temp['results'] )