open-source, high performance, 
                        document-oriented database
                    
no joins + no complex transactions
flexible JSON-style documents
{
  "author": "trevor",
  "text": "...",
  "tags": ["mongodb"]
}
                database -> database
table -> collection
row -> document
column -> field
table joins -> embedded documents / linking
primary key -> "_id"
simple 1to1 syntax with mongo console
pip install pymongo
                
>>> from pymongo import MongoClient
>>> conn = MongoClient()
                    
                
>>> from datetime import datetime
>>> db = conn.myblog
>>> db.posts.insert({
...   "author": "trevor",
...   "date": datetime.utcnow(),
...   "text": "...",
...   "tags": ["mongodb"]
... })
                    
                
>>> posts = db.posts.find({"author": "trevor"})
                        
                    
>>> from pymongo import DESCENDING
>>> posts = db.posts.find()
...                 .sort("date", DESCENDING)
...                 .limit(10)
                        
                    
>>> db.posts.ensure_index("tags")
>>> db.posts.find({"tags": "mongodb"})
                        
                    
>>> db.posts.count()
>>> db.posts.find({"author": "trevor"}).count()
                        
                    Posts since April
>>> db.posts.find({"date" {"$gt": datetime(2012, 4, 1)}})
                        
                    $ne$lt $lte$gt $gte$not$in $nin$mod$all$size$exists
>>> from pymongo import GEO2D
>>> db.craters.ensure_index("coordinates", GEO2D)
                        
                        $near$maxDistance$within$center$box $polygon
>>> db.posts.update({"_id": post["_id"]}, {"$inc": {"views": 1}})
                        
                    $set $unset$inc $dec$pop $push$addToSetpip install mongoengine
                            object-document mapper 
                            simple declarative api, similar to Django ORM
                        
from mongoengine import *
connect('myblog')
class Post(Document):
    author = StringField(required=True)
    date = DateTimeField(default=datetime.utcnow)
    text = StringField()
    tags = ListField(StringField(max_length=30))
Post(
    author = 'trevor',
    text = '...',
    tags = ['mongoengine']
).save()
Post.objects(author='trevor')