はじめに
mongodbのREST API使うメモです。
selectについてですが、where(filter)やlimitやcount取得なんかをメモっておきます
RESTの有効化とかについてはこちら
→mongodbでREST APIを使ってみる - RESTを有効にする、iptables変更、使ってみる、まで
こんなメニュー
- 通常select
- limit指定
- 条件指定のwhere(filter)
- where(filter)+limit
- ドキュメント件数取得
- db一覧
今の状態確認
それぞれやってみる前に今のDBがこんな感じってのを確認しておきます
# mongo MongoDB shell version: 2.4.8 connecting to: test > show dbs admin (empty) local 0.078125GB rest_db 0.203125GB test 0.203125GB > show collections system.indexes users > db.users.find() { "_id" : ObjectId("538707371a40f349f9d6825e"), "name" : "hoge", "age" : 10 } { "_id" : ObjectId("538707371a40f349f9d6825f"), "name" : "fuga", "age" : 99 } { "_id" : ObjectId("538707371a40f349f9d68260"), "name" : "piyo", "age" : 50 } { "_id" : ObjectId("538707371a40f349f9d68261"), "name" : "kame", "age" : 22 } { "_id" : ObjectId("538707371a40f349f9d68262"), "name" : "nana", "age" : 56 } { "_id" : ObjectId("538707381a40f349f9d68263"), "name" : "kaka", "age" : 10 }
ってことでこのデータに対してRESTしてみます
やってみる
通常select
# curl 'http://127.0.0.1:28017/rest_db/users/' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "538705771a40f349f9d68258" }, "name" : "hoge", "age" : 10 } , { "_id" : { "$oid" : "538705771a40f349f9d68259" }, "name" : "fuga", "age" : 99 } , { "_id" : { "$oid" : "538705771a40f349f9d6825a" }, "name" : "piyo", "age" : 50 } , { "_id" : { "$oid" : "538705771a40f349f9d6825b" }, "name" : "kame", "age" : 22 } , { "_id" : { "$oid" : "538705771a40f349f9d6825c" }, "name" : "nana", "age" : 35 } , { "_id" : { "$oid" : "538707381a40f349f9d68263" }, "name" : "kaka", "age" : 10 } ], "total_rows" : 6 , "query" : {} , "millis" : 0 }
limit指定
# curl 'http://127.0.0.1:28017/rest_db/users/?limit=2' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "538705771a40f349f9d68258" }, "name" : "hoge", "age" : 10 } , { "_id" : { "$oid" : "538705771a40f349f9d68259" }, "name" : "fuga", "age" : 99 } ], "total_rows" : 2 , "query" : {} , "millis" : 0 }
条件指定のwhere(filter)
※nameでfilter # curl 'http://127.0.0.1:28017/rest_db/users/?filter_name=fuga' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "538707371a40f349f9d6825f" }, "name" : "fuga", "age" : 99 } ], "total_rows" : 1 , "query" : { "name" : "fuga" } , "millis" : 0 } ※ageでfilter # curl 'http://127.0.0.1:28017/rest_db/users/?filter_age=10' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "538707371a40f349f9d6825e" }, "name" : "hoge", "age" : 10 } , { "_id" : { "$oid" : "538707381a40f349f9d68263" }, "name" : "kaka", "age" : 10 } ], "total_rows" : 2 , "query" : { "age" : 10 } , "millis" : 0 }
where(filter)+limit
# curl 'http://127.0.0.1:28017/rest_db/users/?filter_age=10&limit=1' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "538707371a40f349f9d6825e" }, "name" : "hoge", "age" : 10 } ], "total_rows" : 1 , "query" : { "age" : 10 } , "millis" : 0 }
ドキュメント件数取得
これは注意したいのが&limit=1
がないとなぜか取得できません
※limit付き # curl 'http://127.0.0.1:28017/rest_db/$cmd/?filter_count=users&limit=1' { "offset" : 0, "rows": [ { "n" : 6, "ok" : 1 } ], "total_rows" : 1 , "query" : { "count" : "users" } , "millis" : 0 } ※limit無し # curl 'http://127.0.0.1:28017/rest_db/$cmd/?filter_count=users' { "offset" : 0, "rows": [ ], "total_rows" : 0 , "query" : { "count" : "users" } , "millis" : 102 }
db一覧
こちらもlimit指定がないと取得できないようです
# curl 'http://127.0.0.1:28017/admin/$cmd/?filter_listDatabases=1&limit=1' { "offset" : 0, "rows": [ { "databases" : [ { "name" : "test", "sizeOnDisk" : 218103808, "empty" : false }, { "name" : "test_db", "sizeOnDisk" : 218103808, "empty" : false }, { "name" : "rest_db", "sizeOnDisk" : 218103808, "empty" : false }, { "name" : "local", "sizeOnDisk" : 83886080, "empty" : false }, { "name" : "admin", "sizeOnDisk" : 1, "empty" : true } ], "totalSize" : 738197504, "ok" : 1 } ], "total_rows" : 1 , "query" : { "listDatabases" : 1 } , "millis" : 0 }
まとめ
簡単はwhere(fileter)はこんな感じでできます!
enjoy!。。。といいたいところですが、
もっと複雑なfilterについて(matchとかsumとかとか)情報があればどなたか教えてください(><)
※あまり調べられてませんが。。。汗