2011年8月28日日曜日

gmongoで重複しない値を取得する(distinct)

gmongoで重複しない値を取得するには、以下のコードのようにdistinctを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
db["stores"].drop()
// コレクションにオブジェクトを挿入する
col = db["stores"]
col.insert([country:"Japan", store:"store_A", sales:100])
col.insert([country:"Japan", store:"store_B", sales:120])
col.insert([country:"Japan", store:"store_C", sales:170])
col.insert([country:"United States", store:"store_D", sales:80])
col.insert([country:"United States", store:"store_E", sales:200])
col.insert([country:"United States", store:"store_F", sales:190])
col.insert([country:"United States", store:"store_G", sales:100])
// 重複しない値を取得 -> JapanとUnited Statesが返される
for(val in col.distinct("country")){
  println val
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月25日木曜日

gmongoでインデックスを削除する

gmongoでインデックスを削除するには、以下のコードのようにdropIndexを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
db["members"].drop()
col = db["members"]
// myindexという名称でユニークインデックスを作成する
col.ensureIndex(new BasicDBObject([member_id:true]),
  new BasicDBObject([name:"myindex", unique:true]))
// インデックス情報を表示
for(index in col.getIndexInfo()){
  println "collection:${col}, index name:${index.name}, " +
  "key:${index.key}, unique:${index.unique}"
}
// インデックスを削除
col.dropIndex("myindex")
println "an index is removed."
// インデックス情報を表示
for(index in col.getIndexInfo()){
  println "collection:${col}, index name:${index.name}, key:${index.key}"
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月23日火曜日

gmongoでインデックスの情報を列挙する

gmongoでインデックスの情報を列挙するには、以下のコードのようにgetIndexInfoを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
// コレクションのインデックス情報を列挙する
db = mongo.getDB("local")
for(col in db.getCollectionNames()){
  for(index in db[col].getIndexInfo()){
    println "collection:${col}, index name:" + index.name + ", key:" + index.key
  }
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月22日月曜日

gmongoでCapped Collectionを列挙する

Capped Collectionを列挙するには、以下のコードを実行します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
// capped collectionを列挙する
for(col in db.getCollectionNames()){
  if( db[col].isCapped() ){
    println col
  }
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月21日日曜日

gmongoでfsyncコマンドを実行する

gmongoでfsyncコマンドを同期モードで実行するには、以下のコードを実行します。
@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("admin")

// fsyncコマンドでfull flushを実行
println db.command("fsync")

非同期でfsyncコマンドを実行するには以下のコマンドを実行します。
@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("admin")

// 非同期にfsyncコマンドでfull flushを実行
println db.command([fsync:1, async:true])

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月18日木曜日

gmongoでユーザのパスワードを変更する

gmongoでユーザのパスワードを変更するには、以下のコードのようにaddUserを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
println db.authenticate("test1", "test1_password".toCharArray())

// パスワード変更(password変更だけどaddUser)
db.addUser("test1", "new_test1_password".toCharArray())

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月16日火曜日

gmongoでユーザを削除する

gmongoでユーザを削除するには、以下のコードのようにremoveUserを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
dbAdmin = mongo.getDB("admin")
println dbAdmin.authenticate("admin", "admin_password".toCharArray())
dbLocal = mongo.getDB("local")
// ユーザを削除する
println dbLocal.removeUser("test1")
col = dbLocal["system.users"]
// ユーザを一覧表示する
for(obj in col.find()){
  println obj
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月14日日曜日

gmongoで画像ファイルなどのバイナリーデータを取り扱う

gmongoで画像ファイルなどのバイナリーデータは、以下のコードのように通常のフィールド同様に取り扱えます。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
db["images"].drop()
col = db["images"]
// 画像ファイルの中身をDBに格納
col.insert([name:"san francisco", image:new File("./SF.JPG").getBytes()])

// DBに格納された画像ファイルを取得
doc = col.findOne([name:"san francisco"])
new File("output.jpg").setBytes(doc.image)

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ


gmongoでread-onlyユーザを作成する

gmongoでread-onlyユーザを作成するには、以下のコードのようにaddUserの第3引数にtrueを指定します。

@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
dbLocal = mongo.getDB("local")

// read-onlyユーザ作成
dbLocal.addUser("test2", "test2_password".toCharArray(), true)

Note
上記のプログラムは認証をdisableにした状態で実行します。
ユーザを作成後、mongodb.confにauth=trueを追加して認証をenableにします。

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo

groovyとMongoDBのまとめ

gmongoでユーザを作成する

2011年8月12日金曜日

gmongoでユーザを一覧表示する

gmongoでユーザを一覧表示するには、以下のコードのようにsystem.usersコレクションを検索します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
println db.authenticate("test1", "test1_password".toCharArray())
col = db["system.users"]
// ユーザを一覧表示する
for(obj in col.find()){
  println obj
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月11日木曜日

gmongoでユーザ認証を行う

gmongoでユーザ認証を行うには、以下のコードのようにauthenticateメソッドを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
dbLocal = mongo.getDB("local")
try
{
// 認証前はunauthorized dbエラー発生
println "count:" + dbLocal.bookmarks.find().count()
}
catch(MongoException mex)
{
println mex
}

// 認証
println dbLocal.authenticate("test1", "test1_password".toCharArray())
try
{
println "count:" + dbLocal.bookmarks.find().count()
}
catch(MongoException mex)
{
println mex
}

Note
認証を有効にするには、mongodb.confにauth = trueを追加します。

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月10日水曜日

gmongoでユーザを作成する

gmongoでユーザを作成するには、以下のコードのようにaddUserを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
dbAdmin = mongo.getDB("admin")
dbLocal = mongo.getDB("local")

// Adminユーザ作成
dbAdmin.addUser("admin", "admin_password".toCharArray())

// 一般ユーザ作成
dbLocal.addUser("test1", "test1_password".toCharArray())


Note
上記のプログラムは認証をdisableにした状態で実行します。
ユーザを作成後、mongodb.confにauth=trueを追加して認証をenableにします。

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo

groovyとMongoDBのまとめ

read-onlyユーザを作成する

2011年8月8日月曜日

gmongoでjournal関連のステータスを取得する

gmongoでjournal関連のステータスを取得するには、以下のコードを実行します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*
mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
// journalのステータスを取得
db.command("serverStatus").dur.each { key, value ->
println key + "=" + value
}

Node
journalを有効化にするにはmongodb.confにjournal=trueを追加します。

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ


2011年8月7日日曜日

gmongoでコレクションの内容を別のDBへコピーする

gmongoでコレクションの内容を別のDBへコピーするには、以下のコードを実行します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db1 = mongo.getDB("local")
db2 = mongo.getDB("backup")

// コレクションのドキュメントを別のコレクションにコピー
for( doc in db1["bookmarks"].find() ){
db2["bookmarks"].insert(doc);
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

gmongoで条件に一致するドキュメントの件数を取得する

gmongoで条件に一致するドキュメントの件数を取得するには、以下のコードのようにcountを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
db["office_location"].drop()
// コレクションにオブジェクトを挿入する
col = db["office_location"]
col.insert([office:"Tokyo", country:"Japan"])
col.insert([office:"Sanfrancisco", country:"United States"])
col.insert([office:"Chicago", country:"United States"])
// United Statesのオフィスの件数を取得する
println("count:" + col.find([country:"United States"]).count() )

println "----"
// JavaScript ExpressionでUnited Statesのオフィスの件数を取得する
println("count:" +
col.find([$where:"this.country == 'United States'"]).count())

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo
groovyとMongoDBのまとめ

2011年8月2日火曜日

gmongoでコレクションの統計を取得する

gmongoでコレクションの統計を取得するには、以下のコードを実行します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
// コレクションの統計情報を取得
db.bookmarks.getStats().each { key, value ->
println(key + "=" + value)
}
println "-----"
// コレクションのストレージサイズを取得
println "storage size:" + db.bookmarks.getStats().storageSize
// コレクションのトータルインデックスサイズを取得
println "total index size:" + db.bookmarks.getStats().totalIndexSize

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.7, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo

groovyとMongoDBのまとめ

コレクション毎のストレージサイズ・インデックスサイズを取得する

データベースの統計情報を取得する