Skip to content

Instantly share code, notes, and snippets.

@RajaS
Created August 8, 2011 07:27
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RajaS/1131352 to your computer and use it in GitHub Desktop.
Save RajaS/1131352 to your computer and use it in GitHub Desktop.
Using pymongo with mongolab
#!/usr/bin/python
# Raja Selvaraj <rajajs at gmail>
"""
Demonstrate use of pymongo to connect to a mongodb database on a hosted server,
specifically mongolab
"""
# Use a database already created on mongolab
server = 'xxxxx.mongolab.com'
port = xxxxx
db_name = 'xxxx'
username = 'xxxxx'
password = 'xxxxxx'
from pymongo import Connection
# what versions are we using
import sys
print 'Python version', sys.version
import pymongo
print 'Pymongo version', pymongo.version
##
# connect to server
print '\nConnecting ...'
conn = Connection(server, port)
# Get the database
print '\nGetting database ...'
db = conn[db_name]
# Have to authenticate to get access
print '\nAuthenticating ...'
db.authenticate(username, password)
# Get the documents
posts = db.posts
print '\nNumber of posts', posts.find().count()
# Remove all old posts
posts.remove()
print '\nNumber of posts after removal', posts.find().count()
# Let us add one post
post = {'Name' : 'Human',
'Heart rate' : 60,
'Longevity' : 70,
'tags' : ['domestic', 'omnivore']}
posts.insert(post)
print '\nNumber of posts after first insert', posts.find().count()
# Bulk inserts
new_posts = [{'Name': 'Cat',
'Heart rate' : 150,
'Longevity' : 15,
'tags' : ['domestic', 'carnivore']},
{'Name' : 'Small dog',
'Heart rate' : 100,
'Longevity' : 10,
'tags' : ['domestic', 'omnivore']},
{'Name' : 'Medium Dog',
'Heart rate' : 90,
'Longevity' : 15,
'tags' : ['domestic', 'omnivore']},
{'Name' : 'Large dog',
'Heart rate' : 75,
'Longevity' : 17,
'tags' : ['domestic', 'omnivore']},
{'Name' : 'Chicken',
'Heart rate' : 275,
'Longevity' : 15,
'tags' : ['domestic', 'omnivore']},
{'Name' : 'Elephant',
'Heart rate' : 30,
'Longevity' : 70,
'tags' : ['wild', 'herbivore']},
{'Name' : 'Giraffe',
'Heart rate' : 65,
'Longevity' : 20,
'tags' : ['wild', 'herbivore']}]
posts.insert(new_posts)
print '\nNumber of posts after bulk insert', posts.find().count()
## Querying
# Let us see all the posts
print '\nAll posts'
for post in posts.find():
print post
# find_one
print '\nOne post only'
print posts.find_one()
# Find animals with heart rate > 100
print '\nAnimals with heart rate more than 100'
for post in posts.find({'Heart rate' : {"$gt" : 100}}):
print post
# Find animals with longevity between 20 and 70 (inclusive)
print '\nAnimals with longevity between 20 and 70 (inclusive range)'
for post in posts.find({'Longevity' : {"$gte" : 20, "$lte" : 100}}):
print post
# create an index to speed up queries
# using ensure_index instead would create an index only if it does not exist
print '\nCreating index for heart rate'
posts.create_index("Heart rate")
# Find by name - string matching
print '\nRetrieve entry for elephant'
print posts.find_one({'Name' : 'Elephant'})
# Regex matching to find substring
print '\nRetrieve entries for all dogs'
for post in posts.find({'Name' : {'$regex' : 'dog'}}):
print post
# Do same with more regex options
print '\nRetrieve entries for all dogs by using case insensitive matching'
import re
regex = re.compile('dog', re.IGNORECASE)
for post in posts.find({'Name' : regex}):
print post
# Query for tags
print '\nRetrieve entries for all domestic omnivores'
for post in posts.find({'tags' : {'$all' : ['domestic', 'omnivore']}}):
print post
# close the connection
print '\nClosing the connection'
conn.disconnect()
## References
##
# 1. http://api.mongodb.org/python/current/tutorial.html
# 2. http://www.mongodb.org/display/DOCS/Advanced+Queries
# 2. http://stackoverflow.com/questions/3483318/performing-regex-queries-with-pymongo
# 3. Data for posts - http://www.sjsu.edu/faculty/watkins/longevity.htm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment