はじめに
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とかとか)情報があればどなたか教えてください(><)
※あまり調べられてませんが。。。汗