2011年5月31日火曜日

redis-pyでキーの値の一部を取得する

redis-pyでキーの値の一部を取得するには、以下のコードのようにsubstrを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.set('key1', 'val12345')
# キーの値の一部を取得する
# -> 123を返す
print(rc.substr('key1', 3, 5))

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月30日月曜日

PyMongoでGroup byした最大値を求める

PyMongoでGroup byした最大値を求めるには、以下のコードのようにJavaScript Functionを使用して最大値を求めます。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year_area")
col = conn.local.sales_by_year_area
# データをinsert
col.insert({"year":2009, "area":"North", "sales":100})
col.insert({"year":2009, "area":"South", "sales":150})
col.insert({"year":2010, "area":"North", "sales":200})
col.insert({"year":2010, "area":"South", "sales":250})
col.insert({"year":2011, "area":"North", "sales":300})
col.insert({"year":2011, "area":"South", "sales":350})
# 地域毎の年間最高売上を表示する
for obj in col.group(
key={"area":True},
condition={},
initial={"cmax":0},
reduce="function(obj,prev){if(prev.cmax < obj.sales)prev.cmax=obj.sales;}"):
 print str(obj[u"area"]) + ":" + str(obj[u"cmax"])

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月29日日曜日

redis-pyでセットから指定した値を削除する

redis-pyでセットから指定した値を削除するには、以下のコードのようにsremを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
# セットから指定した値を削除する
rc.srem('set1', 'value1')
for value in rc.smembers('set1'):
 print(value)

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月28日土曜日

PyMongoでコレクションをリネームする

PyMongoでコレクションをリネームするには、以下のコードのようにrenameを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
# コレクションをリネームする
conn.local.members.rename("platinum_members")

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月27日金曜日

redis-pyでセットからランダムに値を取得する

redis-pyでセットからランダムに値を取得するには、以下のコードのようにsrandmemberを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
# セットからランダムに値を取得する
print(rc.srandmember('set1'))

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月26日木曜日

PyMongoでdistinctした値を取得する

PyMongoでdistinctした値を取得するには、以下のコードのようにdistinctを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year_area")
col = conn.local.sales_by_year_area
# データをinsert
col.insert({"year":2009, "area":"North", "sales":100})
col.insert({"year":2009, "area":"South", "sales":150})
col.insert({"year":2010, "area":"North", "sales":200})
col.insert({"year":2010, "area":"South", "sales":250})
col.insert({"year":2011, "area":"North", "sales":300})
col.insert({"year":2011, "area":"South", "sales":350})
# distinctした値を取得
for obj in col.distinct("year"):
 print obj

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月25日水曜日

redis-pyでセットからランダムに値を取得して削除する

redis-pyでセットからランダムに値を取得して削除するには、以下のコードのようにspopを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
# セットからランダムに値を取得して削除する
print(rc.spop('set1'))
for value in rc.smembers('set1'):
 print('set1:' + value)

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月24日火曜日

PyMongoでGroup byした総和を求める

PyMongoでGroup byした総和を求めるには、以下のコードのようにgroupを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year_area")
col = conn.local.sales_by_year_area
# データをinsert
col.insert({"year":2009, "area":"North", "sales":100})
col.insert({"year":2009, "area":"South", "sales":150})
col.insert({"year":2010, "area":"North", "sales":200})
col.insert({"year":2010, "area":"South", "sales":250})
col.insert({"year":2011, "area":"North", "sales":300})
col.insert({"year":2011, "area":"South", "sales":350})
# 地域毎の総売上を表示する
for obj in col.group(
key={"area":True},
condition={},
initial={"csum":0},
reduce="function(obj,prev){prev.csum += obj.sales;}"):
 print str(obj[u"area"]) + ":" + str(obj[u"csum"])

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月23日月曜日

redis-pyでセットの値をソートする

redis-pyでセットの値をソートするには、以下のコードのようにsortを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
# セットに値を追加
rc.sadd('set1', 'value5')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value3')
rc.sadd('set1', 'value4')
# セットの値をソートする
for value in rc.sort('set1', alpha=True):
 print(value)
# セットの値を降順にソートする
for value in rc.sort('set1', desc=True, alpha=True):
 print(value)

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月22日日曜日

PyMongoでin句で指定した値に一致するデータを抽出する

PyMongoでin句で指定した値に一致するデータを抽出するには、以下のコードのように$inを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year")
col = conn.local.sales_by_year
# データをinsert
col.insert({"year":2006, "sales":100})
col.insert({"year":2007, "sales":200})
col.insert({"year":2008, "sales":300})
col.insert({"year":2009, "sales":400})
col.insert({"year":2010, "sales":500})
col.insert({"year":2011, "sales":600})
# 2010年と2011年のデータを表示する
for obj in col.find({"year":{"$in":[2010, 2011]}}):
 print str(obj[u'year']) + ":" + str(obj[u'sales'])
print("---")
# JavaScript Expressionで2010年と2011年のデータを表示する
for obj in col.find({"$where":"this.year in {2010:1, 2011:1}"}):
 print str(obj[u'year']) + ":" + str(obj[u'sales'])

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月21日土曜日

redis-pyで指定した値を別のセットに移動させる

redis-pyで指定した値を別のセットに移動させるには、以下のコードのようにsmoveを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
rc.delete('set2')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
# 指定した値を別のセットに移動させる
rc.smove('set1', 'set2', 'value3')
for value in rc.smembers('set1'):
 print('set1:' + value)
for value in rc.smembers('set2'):
 print('set2:' + value)

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月20日金曜日

PyMongoでnot equalを条件としてデータを抽出する

PyMongoでnot equalを条件としてデータを抽出するには、以下のコードのように$neを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year")
col = conn.local.sales_by_year
# データをinsert
col.insert({"year":2006, "sales":100})
col.insert({"year":2007, "sales":200})
col.insert({"year":2008, "sales":300})
col.insert({"year":2009, "sales":400})
col.insert({"year":2010, "sales":500})
col.insert({"year":2011, "sales":600})
# 2006年以外のデータを表示する
for obj in col.find({"year":{"$ne":2006}}):
 print(str(obj[u'year']) + ":" + str(obj[u'sales']))
print("---")
# JavaScript Expressionで条件を記述
for obj in col.find({"$where":"this.year != 2006"}):
 print(str(obj[u'year']) + ":" + str(obj[u'sales']))

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月19日木曜日

redis-pyで指定した値がセットに含まれるか確認する

redis-pyで指定した値がセットに含まれるか確認するには、以下のコードのようにsismemberを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
# 指定した値がセットに含まれるか確認する
print(rc.sismember('set1', 'value1'))
print(rc.sismember('set1', 'not-exist'))

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月18日水曜日

PyMongoで剰余を条件としてデータを抽出する

PyMongoで剰余を条件としてデータを抽出するには、以下のコードのように$modを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year")
col = conn.local.sales_by_year
# データをinsert
col.insert({"year":2006, "sales":100})
col.insert({"year":2007, "sales":200})
col.insert({"year":2008, "sales":300})
col.insert({"year":2009, "sales":400})
col.insert({"year":2010, "sales":500})
col.insert({"year":2011, "sales":600})
# 偶数年のデータを表示する
for obj in col.find({"year":{"$mod":[2,0]}}):
 print(str(obj[u'year']) + ":" + str(obj[u'sales']))
print("---")
# JavaScript Expressionで偶数年のデータを表示する
for obj in col.find({"$where":"this.year % 2 == 0"}):
 print(str(obj[u'year']) + ":" + str(obj[u'sales']))

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月17日火曜日

redis-pyで複数セットの積集合を含むセットを作成する

redis-pyで複数セットの積集合を含むセットを作成するには、以下のコードのようにsinterstoreを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
rc.delete('set2')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
rc.sadd('set2', 'value2')
rc.sadd('set2', 'value5')
# 複数セットの積集合を含むセットを作成する
rc.sinterstore('rs', ['set1', 'set2'])
for value in rc.smembers('rs'):
 print value

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月16日月曜日

PyMongoで指定のフィールドが存在しないオブジェクトを検索する

PyMongoで指定のフィールドが存在しないオブジェクトを検索するには、以下のコードのように$exists演算子を使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("members")
col = conn.local.members
# メンバーをinsert
col.insert({"name":"brian", "age":"21"})
col.insert({"name":"bob", "age":"22"})
col.insert({"name":"rob", "age":"23"})
col.insert({"name":"brandy"})
# フィールドが存在しないメンバーを探す
for obj in col.find({"age":{"$exists":False}}):
 print(obj)
print("---")
# JavaScript Expressionでフィールドが存在しないメンバーを探す
for obj in col.find({"$where":"'age' in this == false"}):
 print(obj)

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月15日日曜日

redis-pyで複数セットの積集合を取得する

redis-pyで複数セットの積集合を取得するには、以下のコードのようにsinterを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('set1')
rc.delete('set2')
# セットに値を追加
rc.sadd('set1', 'value1')
rc.sadd('set1', 'value2')
rc.sadd('set1', 'value3')
rc.sadd('set2', 'value2')
rc.sadd('set2', 'value5')
# 複数セットの積集合を取得する
for value in rc.sinter(['set1', 'set2']):
 print value

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月14日土曜日

PyMongoで要素数を取得する

PyMongoで要素数を取得するには、以下のコードのようにcountを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("members")
col = conn.local.members
# メンバーをinsert
col.insert({"name":"brian", "age":"21"})
col.insert({"name":"bob", "age":"22"})
col.insert({"name":"rob", "age":"23"})
# メンバーの数
print("total_count:" + str(col.count()))
# 22才以上のメンバーの数(cursor.count())
print(col.find({"age":{"$gte":"22"}}).count())

補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4

2011年5月13日金曜日

redis-pyで指定したキーが存在しない場合のみ値を設定する

redis-pyで指定したキーが存在しない場合のみ値を設定するには、以下のコードのようにsetnxを使用します。

# coding=UTF-8
import redis

rc = redis.Redis(host='localhost', port=6379, db=1)
rc.delete('key1')
rc.delete('key2')
rc.set('key1', 'value1')
# 指定したキーが存在しない場合のみ値を設定する
rc.setnx('key1', 'modified') # key1は既に存在するので値は更新されない
rc.setnx('key2', 'modified')
print(rc.get('key1'))
print(rc.get('key2'))

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月11日水曜日

redis-pyで指定した秒数で期限切れとなるkey-valueを設定する

redis-pyで指定した秒数で期限切れとなるkey-valueを設定するには、以下のコードのようにsetexを使用します。

# coding=UTF-8
import redis
import time

rc = redis.Redis(host='localhost', port=6379, db=1)
# 指定した秒数で期限切れとなるkey-valueを設定
rc.setex('key1', 'expires_within_5sec', 5);
for elapsed in range(10):
 print(str(elapsed) + ':' + str(rc.get('key1')))
 time.sleep(1)

補足
ubuntuで以下のコマンドでredisとredis-pyのインストールができます。
sudo apt-get install redis-server
sudo apt-get install python-redis

動作環境
Python 2.6.6, redis-py (2.0.0-1)

2011年5月10日火曜日

PyMongoでプロファイリングレベルを設定する

PyMongoでプロファイリングレベルを設定するには、以下のコードのようにset_profiling_levelを使用します。

# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
db = conn.local
# プロファイリングレベルを設定
db.set_profiling_level(ALL)
 
補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo

動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4