ラベル mongodb の投稿を表示しています。 すべての投稿を表示
ラベル mongodb の投稿を表示しています。 すべての投稿を表示

2011年12月21日水曜日

恥ずかしくて今さら聞けない、GMongo講座 2

前回の投稿からずいぶんと時間が経ってしまいました。

いろいろとすったもんだがあったので、まあ、ちょっとアレして下さい。

で、気づいたらG* Advent Calendarの担当日になっていて、

本当はGrails2.0リリース記念で記事を一本書きたかったのですが、

若干、準備不足ということで、

今回の『恥ずかしくて今さら聞けない、GMongo講座 2』でもって、G* Advent Calendarの記事とさせて下さい。

で、これまでの『恥ずかしくて今さら聞けない、GMongo講座』ですが、以下のエントリーがあります。


これらを参考にしてください。

では、本日の内容ですが、


と同等の内容をGroovyでやります。

まあ、つまりクエリーですね。

データの準備


今日はクエリですので、データをまんべんなく準備します。ってどこかで書いた記憶ががが…

例によって、JUnitの@Beforeにて準備します。

MongoTest.groovy

import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
import org.junit.After


    GMongo mongo

    DB db

    static List<Integer> list = [1,2,3,4,5,6,7,8,9]

    static String name = 'name'

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017)
        db = mongo.getDB("mydb")
        def store = db[items]
        def objects = []
        list.each { x ->
            def base = x
            list.each { y ->
                base += y
                def multiple = x * y
                objects << [
                        name : name,
                        xIndex : x,
                        yIndex : y,
                        sum : base,
                        multiple : multiple]
            }
        }
        objects.each { obj ->
            store.insert(obj)
        }
    }




これで、81個のデータを準備します。

念のため、テストデータが揃っているかテストしておきましょう。

MongoTest.groovy

import org.junit.Test
import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
import org.junit.After


    GMongo mongo

    DB db

    static List<Integer> list = [1,2,3,4,5,6,7,8,9]

    static String name = 'name'

    int count = 81

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017)
        db = mongo.getDB("mydb")
        def store = db[items]
        def objects = []
        list.each { x ->
            def base = x
            list.each { y ->
                base += y
                def multiple = x * y
                objects << [
                        name : name,
                        xIndex : x,
                        yIndex : y,
                        sum : base,
                        multiple : multiple]
            }
        }
        objects.each { obj ->
            store.insert(obj)
        }
    }

    @After
    public void tearDown() {
        db.items.remove([:])
    }

    @Test
    public void testSetUp() {
        def list = db.items.find()
        assert  list.size() == count
    }



で、テストを実行します。


はい、大丈夫そうです。

一応、念のため、登録したデータはこんな感じになっています。

1 2 3 4 5 6 7 8 9
1 sum : 2
multi : 1
sum : 4
multi : 2
sum : 7
multi : 3
sum : 11
multi : 4
sum : 16
multi : 5
sum : 22
multi : 6
sum : 29
multi : 7
sum : 37
multi : 8
sum : 46
multi : 9
2 sum : 3
multi : 2
sum : 5
multi : 4
sum : 8
multi : 6
sum : 12
multi : 8
sum : 17
multi : 10
sum : 23
multi : 12
sum : 30
multi : 14
sum : 38
multi : 16
sum : 47
multi : 18
3 sum : 4
multi : 3
sum : 6
multi : 6
sum : 9
multi : 9
sum : 13
multi : 12
sum : 18
multi : 15
sum : 24
multi : 18
sum : 31
multi : 21
sum : 39
multi : 24
sum : 48
multi : 27
4 sum : 5
multi : 4
sum : 7
multi : 8
sum : 10
multi : 12
sum : 14
multi : 16
sum : 19
multi : 20
sum : 25
multi : 24
sum : 32
multi : 28
sum : 40
multi : 32
sum : 49
multi : 36
5 sum : 6
multi : 5
sum : 8
multi : 10
sum : 11
multi : 15
sum : 15
multi : 20
sum : 20
multi : 25
sum : 26
multi : 30
sum : 33
multi : 35
sum : 41
multi : 40
sum : 50
multi : 45
6 sum : 7
multi : 6
sum : 9
multi : 12
sum : 12
multi : 18
sum : 16
multi : 24
sum : 21
multi : 30
sum : 27
multi : 36
sum : 34
multi : 42
sum : 42
multi : 48
sum : 51
multi : 54
7 sum : 8
multi : 7
sum : 10
multi : 14
sum : 13
multi : 21
sum : 17
multi : 28
sum : 22
multi : 35
sum : 28
multi : 42
sum : 35
multi : 49
sum : 43
multi : 56
sum : 52
multi : 63
8 sum : 9
multi : 8
sum : 11
multi : 16
sum : 14
multi : 24
sum : 18
multi : 32
sum : 23
multi : 40
sum : 29
multi : 48
sum : 36
multi : 56
sum : 44
multi : 64
sum : 53
multi : 72
9 sum : 10
multi : 9
sum : 12
multi : 18
sum : 15
multi : 27
sum : 19
multi : 36
sum : 24
multi : 45
sum : 30
multi : 54
sum : 37
multi : 63
sum : 45
multi : 72
sum : 54
multi : 81

等価


さて、これからはクエリの練習をやってみます。

multipleの値が24になるものを探すと、
  • 3 x 8 = 24
  • 4 x 6 = 24
  • 6 x 4 = 24
  • 8 x 3 = 24

の4つが該当します。

というわけで、イコールクエリーを発行するわけですが、

これの指定方法は簡単です。

findメソッドの引数にハッシュを渡すだけです。

上記の例では

db.items.find([multiple : 24])

という形で検索することができます。

では、テストをしてみましょう。

MongoTest.groovy

import org.junit.Test
import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
import org.junit.After


    GMongo mongo

    DB db

    static List<Integer> list = [1,2,3,4,5,6,7,8,9]

    static String name = 'name'

    int count = 81

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017)
        db = mongo.getDB("mydb")
        def store = db[items]
        def objects = []
        list.each { x ->
            def base = x
            list.each { y ->
                base += y
                def multiple = x * y
                objects << [
                        name : name,
                        xIndex : x,
                        yIndex : y,
                        sum : base,
                        multiple : multiple]
            }
        }
        objects.each { obj ->
            store.insert(obj)
        }
    }

    @After
    public void tearDown() {
        db.items.remove([:])
    }

    @Test
    public void equalQuery() {
        def result = db.items.find([multiple : 24])
        assert result.size() == 4
        result.each {
            println it
        }
    }



実行結果は次のとおりです。


みごとに予定通り検索できています。

不等号


不等号も、前回と同様に$gte;のような記号をハッシュのキーとして用いることで指定できます。

例えば、xIndexの値が3より小さい場合は$lt;を用いて、

[xIndex : [$lt : 3]]
となります。

では、実際にテストを実施してみます。

このテストでは、xIndexの値が3より小さく、1以上の値を検索しています。

MongoTest.groovy

import org.junit.Test
import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
import org.junit.After

    GMongo mongo

    DB db

    static List<Integer> list = [1,2,3,4,5,6,7,8,9]

    static String name = 'name'

    static String items = 'items'

    int count = 81

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017)
        db = mongo.getDB("mydb")
        def store = db[items]
        def objects = []
        list.each { x ->
            def base = x
            list.each { y ->
                base += y
                def multiple = x * y
                objects << [
                        name : name,
                        xIndex : x,
                        yIndex : y,
                        sum : base,
                        multiple : multiple]
            }
        }
        objects.each { obj ->
            store.insert(obj)
        }
    }

    @After
    public void tearDown() {
        db.items.remove([:])
    }

    @Test
    public void testQuery() {
        def store = db['items']
        def list = store.find([xIndex : [$lt : 3, $gte : 1]])
        assert list.size() == 18
        list.each {
            assert it.xIndex in new IntRange(1,2)
        }
    }



そして、テスト結果は次のような感じです。


GMongoを使うと、かなりmongoを直接扱っている感じがして、非常に融合性が高い気がします。

では、次回はインデックスについて学びたいと思います。

それと、次回のG* Advent Calendarは『クソゲーによる自己紹介』で見事Groovy合宿のGDK48で最優秀賞を獲得した@uehajさんです。



2011年12月15日木曜日

恥ずかしくて今さら聞けない、GMongo講座 2-

今日は、恥ずかしくて今さら聞けない、GMongo講座の第二回目を実施しようと思ったのですが、

ちょっと趣旨を変えています。

前々回述べた(かなぁ…)ように、GMongoはmongo-java-driverのthinラッパーで、Javaとの結びつきが容易なわけです。

これはJavaとの親和性を保つというGroovy特有の思想になります。

そこで、GMongoを使いつつ、前回程度のレベルをJavaでも実装してみるというのが今日の目的になります。

題して、

恥ずかしくて今さら聞けない、GMongo講座 2- GMongoをつかってmongo-java-driverを勉強してみる


です。

dependency


前回ではライブラリーのダウンロードにはzipを落とせ的なことを書いたと思います。

で、実際にやってみた方はご存知のことだと思いますが、GMongo自体はmongo-java-driverのthinラッパーなので、mongo-java-driverが依存ライブラリーになっています。

その点で、Mavenを使った人や、@Grab、Gradleを使った人の方が楽だったかもしれません。

私も依存性の解決にはMavenを用いており、下記のコードによって、mongo-java-driverが入手できています。


<dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>1.8.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.gmongo</groupId>
            <artifactId>gmongo</artifactId>
            <version>0.9.2</version>
        </dependency>
    </dependencies>




こういう依存性の解決などには、Mavenすごい役立ちますね。

う〜ん、ゆとりとか関係なく、勉強したほうがよさそうですね…

では、mongo-java-driverを使ってmongodbを触っていきたいと思います。


クライアント起動インスタンス化


ここには、GMongoを使っちゃいます。

基本的には便利なものは便利なものを利用するというスタンスを取ります。

MongoTestJava.groovy

import com.gmongo.GMongo
import org.junit.Before

    GMongo mongo;

    @Before
    public void setUp() {
        mongo = new GMongo('localhost', 27017);
    }



DBの選択とスキーマ取得


あっ、これも全然変わりませんw

MongoTestJava.groovy

import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;

import org.junit.Before

    GMongo mongo;

    DB db;

    DBCollection items;

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017);
        db = mongo.getDB("mydb");
        items = db.getCollection("items");
    }


ちなみに、
  • com.mongodb.DB
  • com.mongodb.DBCollection
というクラスはmongo-java-driverライブラリーに含まれるクラスです。


レコードの作成


ここはJavaだと手順が増えます。

そこは型安全を是とするJavaだと仕方がない場面です。

MongoTestJava.groovy

import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.BasicDBObject;

import org.junit.Before

    GMongo mongo;

    DB db;

    DBCollection items;

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017);
        db = mongo.getDB("mydb");
        items = db.getCollection("items");
        List<DBObject> list = createDbList();
    }

    private List<DBObject> createDbList() {
        List<DBObject> list = new ArrayList<DBObject>();
        for(int i = 0; i < 10; i++) {
            BasicDBObject dbObject = new BasicDBObject();
            dbObject.put("name", "data");
            dbObject.put("value", 1);
            list.add(dbObject);
        }
        return list;
    }


このcom.mongodb.BasicDBObjectというクラスはjava.util.LinkedHashMap<String, Object>を継承しているクラスで、これがJSONデータを表します。

com.mongodb.BasicDBObject#toString()というメソッドでは、JSON形式に変換された文字列が返されます。

一度試してみましょう。


@Test
    public void testJson() {
        List<Integer> list = new ArrayList<Integer>();
        for(int i = 0; i < 10; i++) {
            list.add(i);
        }
        DBObject object = new BasicDBObject();
        object.put("data", "value");

        DBObject dbObject = new BasicDBObject();
        dbObject.put("numero", 1);
        dbObject.put("bool", false);
        dbObject.put("nil", null);
        dbObject.put("key", "KeyString");
        dbObject.put("ArrayData", list);
        dbObject.put("objectData", object);

        System.out.println(dbObject.toString());
        assertThat(dbObject.toString().contains("null"), is(true));
        assertThat(dbObject.toString().contains(" : {"), is(true));
        assertThat(dbObject.toString().contains(" : ["), is(true));
    }


結果はこんな感じです。


JSONになっていますね。
また、JSON内にJSONオブジェクトも生成できています。


レコードの登録


残すところはinsertです。

これは次になります。

MongoTestJava.groovy

import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.BasicDBObject;

import org.junit.Before


    GMongo mongo;

    DB db;

    DBCollection items;

    @Before
    public void setUp() {
        mongo = new GMongo("localhost", 27017);
        db = mongo.getDB("mydb");
        items = db.getCollection("items");
        List<DBObject> list = createDbList();
        items.insert(list);
    }

    @Test
    public void testSetUp() {
        assertThat(items.find().size(), is(10));
    }


では、実際にテストしてみましょう。



見事通りました。

MongodbはJSONデータを扱うので、型の部分でやや面倒な所がありますが、Javaでも行けますね。

というわけで、次回はGMongoの本編です。



2011年12月14日水曜日

恥ずかしくて今さら聞けない、mongodb講座 2

はい、始まりました。

今更感があるものをあえて後ろから追いかけていくこの企画。

世の中のスピードに負けずに、今日もテキトー感満載でのんびりやりますよ。

今日の目的はクエリーです。

データ準備


今日はクエリーですので、データをまんべんなく準備します。

データの挿入は前回にやったとおり、

db.collection.insert({jsondata})です。


> var ary = [1, 3, 7];
> var bry = [5, 11, 2];
> var cry = ["hop", "step", "jump"];
> cry.forEach(function(c) {
......   ary.forEach(function(a) {
......     bry.forEach(function(b) {
......       db.list.insert(
......         {
......           "type" : c,
......           "aIndex" : a,
......           "bIndex" : b,
......           "sum" : a + b,
......           "multi" : a * b
......         }
......       );
......     })
......   })
...... });
> assert(db.list.find().length() === 27, "check size");
> 


はい、 3 x 3 x 3 = 27 のデータが入っているようですね。

クエリ


じゃあ、一応リストを出力してみましょう。
なお、これはSQLで言うところの、

SELECT
    *
FROM
    LIST

にあたります。

これは、db.list.find()で出力できます。


> db.list.find()
{ "_id" : ObjectId("4ee7bd7b4238f3326533177f"), "type" : "hop", "aIndex" : 1, "bIndex" : 5, "sum" : 6, "multi" : 5 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331780"), "type" : "hop", "aIndex" : 1, "bIndex" : 11, "sum" : 12, "multi" : 11 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331781"), "type" : "hop", "aIndex" : 1, "bIndex" : 2, "sum" : 3, "multi" : 2 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331782"), "type" : "hop", "aIndex" : 3, "bIndex" : 5, "sum" : 8, "multi" : 15 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331783"), "type" : "hop", "aIndex" : 3, "bIndex" : 11, "sum" : 14, "multi" : 33 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331784"), "type" : "hop", "aIndex" : 3, "bIndex" : 2, "sum" : 5, "multi" : 6 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331785"), "type" : "hop", "aIndex" : 7, "bIndex" : 5, "sum" : 12, "multi" : 35 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331786"), "type" : "hop", "aIndex" : 7, "bIndex" : 11, "sum" : 18, "multi" : 77 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331787"), "type" : "hop", "aIndex" : 7, "bIndex" : 2, "sum" : 9, "multi" : 14 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331788"), "type" : "step", "aIndex" : 1, "bIndex" : 5, "sum" : 6, "multi" : 5 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331789"), "type" : "step", "aIndex" : 1, "bIndex" : 11, "sum" : 12, "multi" : 11 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178a"), "type" : "step", "aIndex" : 1, "bIndex" : 2, "sum" : 3, "multi" : 2 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178b"), "type" : "step", "aIndex" : 3, "bIndex" : 5, "sum" : 8, "multi" : 15 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178c"), "type" : "step", "aIndex" : 3, "bIndex" : 11, "sum" : 14, "multi" : 33 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178d"), "type" : "step", "aIndex" : 3, "bIndex" : 2, "sum" : 5, "multi" : 6 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178e"), "type" : "step", "aIndex" : 7, "bIndex" : 5, "sum" : 12, "multi" : 35 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178f"), "type" : "step", "aIndex" : 7, "bIndex" : 11, "sum" : 18, "multi" : 77 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331790"), "type" : "step", "aIndex" : 7, "bIndex" : 2, "sum" : 9, "multi" : 14 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331791"), "type" : "jump", "aIndex" : 1, "bIndex" : 5, "sum" : 6, "multi" : 5 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331792"), "type" : "jump", "aIndex" : 1, "bIndex" : 11, "sum" : 12, "multi" : 11 }
has more
> 


なんか、全部出してくれませんでした…orz

では、ここで、"type"が"step"で、"sum"の値が7より大きくて、"multi"の値が15以下のものを検索してみましょう。
SQLでは、つぎのような感じですね。

SELECT
    *
FROM
    LIST
WHERE
    TYPE = 'step'
AND SUM > 7
AND MULTI <= 15
なお、クエリーにはJSONを利用します。
> db.list.find({"type" : "step", "sum" : {$gt : 7}, "multi" : {$lte : 15}});
{ "_id" : ObjectId("4ee7bd7b4238f33265331789"), "type" : "step", "aIndex" : 1, "bIndex" : 11, "sum" : 12, "multi" : 11 }
{ "_id" : ObjectId("4ee7bd7b4238f3326533178b"), "type" : "step", "aIndex" : 3, "bIndex" : 5, "sum" : 8, "multi" : 15 }
{ "_id" : ObjectId("4ee7bd7b4238f33265331790"), "type" : "step", "aIndex" : 7, "bIndex" : 2, "sum" : 9, "multi" : 14 }
> 
演算子には$で始まる記号を用いるんですね。 ちょっとHTMLに慣れていると、一瞬オヤっ!と思うかもしれません。 記号の向きが逆になっていることに気をつけてください。
数学記号JSON中で指定する記号
<&gt
<=&gte
>=&lte
>&lt


はい、というわけで、次回はGmongoに行きます。


2011年12月12日月曜日

恥ずかしくて今さら聞けない、GMongo講座 1

さて、昨日は恥ずかしくて今さら聞けない、mongodb講座 1などというものを書いたわけですが、今日は

恥ずかしくて今さら聞けない、GMongo講座 1


です。

みなさんお間違えのないようにお願いします。

GMongoって何ぞ?という方もいると思いますので、とりあえず、簡単に説明すると、

Groovyからmongodbにつなげるthin ドライバーです。

もっと詳しく知りたい?ググレカスりましょう。

導入

GitHubのアドレスはhttps://github.com/poiati/gmongoです。

ここからzipダウンロードしてpathを通してやってください。

なお、このライブラリーは標準のmavenリポジトリーにも登録されています。
mavenから使いたい場合は、次のように記述すると使えます。

    <dependencies>
        <dependency>
            <groupId>com.gmongo</groupId>
            <artifactId>gmongo</artifactId>
            <version>0.9.2</version>
        </dependency>
    </dependencies>


おっと、私のように頭がゆとり系の人にはmavenなんて難しいことを書いてはダメでした。

@Grapesでは次のような感じです。

@Grapes(
 @Grab(group='com.gmongo', module='gmongo', version='0.9.2')
)


Gradleでは次のような感じになります。

repositories {
    mavenCentral()
}

dependencies {
    groovy : 'com.gmongo:gmongo:0.9.2'
}


ちなみにJavaとの親和性の高いGroovyですから、Groovyで書かれたライブラリを使ってJavaで開発なんてこともできると思います(テキトー)

では、昨日と同じような感じで使ってみたいと思います。

クライアント起動インスタンス化


ホスト名とポート番号を渡してやるだけでインスタンス化できます。
MongoTest.groovy

import com.gmongo.GMongo
import org.junit.Before

    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
    }


これだけで、mongodbとの接続が完了します。

DBの選択


使うDBを選択します。

昨日のuse db名称ですね。
これはGMongoの次のメソッドを用いることで、DBインスタンスを取得できます。

MongoTest.groovy

import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB

    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
    }


レコードの登録


SQLで言うところのinsertですね。

昨日の例では、mydb.itemsというエンティティ(?)に入れましたので、同様のコードを書きたいと思います。

まずはエンティティの取得から。

MongoTest.groovy

import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB

    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def entity = db['items']
    }


えっ、これだけ!?

そうなんです。これだけなんです。

さすがGroovy、Groovyかわいいよ、Groovy。

あとは、このentityにデータを入れていけば良いのです。

昨日の例ではここで登録するデータの形式はJSONでしたが、

さすがGroovy、Hashでデータを入れられます。

MongoTest.groovy

import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB

    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def entity = db['items']
        10.times {
            entity.insert([type : 'data', value : it])
        }
    }


さて、ではデータが登録されているかどうかテストしてみましょう。
MongoTest.groovy

import org.junit.Test
import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
class MongoTest {
    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def entity = db['items']
        10.times {
            entity.insert([type : 'data', value : it])
        }
    }

    @Test
    public void testSetUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def list = db.items.find()
        assert list.size() == 10
    }
}


では、テスト実行!


はい、通りました!


片付け


テストを通ったのは良いのですが、これこのままにしておくと、
後でテストこけます。

なので、テストデータを作成したら、 @Afterを使ってデータを削除しておきましょう。
MongoTest.groovy

import org.junit.Test
import com.gmongo.GMongo
import org.junit.Before
import com.mongodb.DB
import org.junit.After

class MongoTest {
    @Before
    public void setUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def entity = db['items']
        10.times {
            entity.insert([type : 'data', value : it])
        }
    }

    @Test
    public void testSetUp() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        def list = db.items.find()
        assert list.size() == 10
    }

    @After
    public void tearDown() {
        def mongo = new GMongo('localhost', 27017)
        def db = mongo.getDB('mydb')
        db.items.remove([:])
    }
}



ちなみに、 @Afterで実行したコマンドはmongodbにおける次のコマンドと同じです。


> db.items.remove({})
> 


はい、以上、今日はここまで。

次回はまたmongodbに戻ります。


2011年12月11日日曜日

恥ずかしくて今さら聞けない、mongodb講座 1

とりあえず、 G* Advent Calendarに向けて目下ネタを作成中です。

というわけで、mongodbをいじることにしました。

なぜは聞かないでください。

たんなる思いつきだけで生きていますので…

インストールとサービスの起動


インストールは結構簡単です。

サービスの起動も簡単です。

Macの人


Mac Portsでインストールしました。オレは…


sudo port install mongodb


だったような…(テキトーなので忘れている

まあ、わからなくても、「Max mongodb インストール」とかでググればなんか出てきます。
そんなものです。

ちなみに、portでインストールした場合、ビルドに結構時間がかかりました。

MBA 11inch Core-i7 で2時間くらいかかります。

あと、portでインストールした場合、自動でサービスを起動してくれるコマンドの紹介とか書いてあります。

Windowsの人


とりあえず、mongodbのホームページからzipをダウンロードして適度なフォルダにインストールしましょう。

インストール完了したら、mongod.exeとかいうのをダブルクリックすれば多分サービスが起動します。

Linuxの人


え、オレが教えなくても(ry
sudo apt-getとかでいいんじゃね(テキトー


とりあえず使う


クライアントを起動


とりあえず、使うには次のコマンドを叩いて、クライアントを起動しましょう。


$ mongodb
MongoDB shell version: 2.0.1
connecting to: test
> 


DBの選択



> use mydb
switched to mydb
> 


とりあえずデータを入れてみよう



> db
mydb
> db.items
mydb.items
> db.items.insert({"type" : "data", "value" : 1})
> assert(db.items.find().length() === 1, "insert 1 record, the number of fetch will become 1")
> 


はいデータ1件入っていますね。

とりあえず今日はここまで。