mongodbのデータ取り出し方の操作方法。検索と登録方法

2017.04.02 Sunday 10:55
0
    # mongodb ログイン
    mongo

    #

    MongoDBとRDBの用語比較(厳密には異なる)

    MongDB RDB
    データベース データベース
    コレクション テーブル collections は RDBの テーブル
    ドキュメント 行(レコード)
    フィールド 列



    # mongodb insert
    collection
    db.user_collect.insert({user_id: "uid001", age: 10, status: "A"})
    db.user_collect.insert({user_id: "uid002", age: 20, status: "B"})
    db.user_collect.insert({user_id: "uid003", age: 30, status: "B"})
    db.user_collect.insert({ age: 40, status: "B"})
    db.user_collect.insert({user_id: "uid005", age: 50, status: "C"})


    # select 検索 参照
    # 全文検索 select * from tbl
    > db.user_collect.find()
    { "_id" : ObjectId("58e0441a3708943450405c54"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c58"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >

    # 件数をカウント
    > db.user_collect.count()
    5

    または

    > db.user_collect.find().count()
    5
    >

    # limit指定 指定した件数のみを取得
    > db.user_collect.find().limit(3)
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    >


    # 検索フィールドを指定して検索
    第1パラメータは、検索条件
    第2パラメータで、検索フィールド
    表示したいフィールドを1にする。非表示にしたい場合は0にする。
    デフォルトで、_id が表示されるので非表示にしたい場合はこれをつかう
    db.user_collection.find({}, user_id, age )

    > db.user_collect.find({}, { age:1} )
    { "_id" : ObjectId("58e0441a3708943450405c54"), "age" : 10 }
    { "_id" : ObjectId("58e044243708943450405c55"), "age" : 20 }
    { "_id" : ObjectId("58e044243708943450405c56"), "age" : 30 }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40 }
    { "_id" : ObjectId("58e044323708943450405c58"), "age" : 50 }
    >

    > db.user_collect.find({}, { _id:0 , age:1} )
    { "age" : 10 }
    { "age" : 20 }
    { "age" : 30 }
    { "age" : 40 }
    { "age" : 50 }
    >

    # 検索(条件1つ)
    > db.user_collect.find({ status:"B"})
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40, "status" : "B" }
    >

    # 検索(条件複数)
    > db.user_collect.find({ status:"B",user_id:"uid002"})
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    >
    >

    # 検索(条件 or検索)

    findの第一引数に $or を指定する
    条件は[]でくくり、それぞれの条件を {} でくくる

    > db.user_collect.find({ $or: [ {status:"B"}, { status:"C"} ] })
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c58"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >
    > db.user_collect.find(
    { $or: [
    { status:"B"},
    { status:"C"}
    ] }
    )



    # 比較演算子
    演算子 MongoDB 概要 サンプル
    = {name:'hoge'} nameの値がhogeの場合
    < $lt 右辺より小さい { age:{$lt:100} }
    <= $lte 右辺以下 { age:{$lte:100} }
    > $gt 右辺より大きい { age:{$gt:100} }
    >= $gte 右辺以上 { age:{$gte:100} }
    != $ne 等しくない { name:{$ne:'mr.a'} }
    該当なし $exists フィールド(列)自体の存在チェック db.mycol.find({ hoge:{$exists:false} })
    OR $or $orで指定する条件のいずれかを満たすものを抽出 db.mycol.find({$or:[{loves:'apple'},{loves:'energon'}]})



    # ageが20より大きい
    > db.user_collect.find( { age : { $gt: 20 } } )
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c58"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >
    >

    # ageが20以上
    > db.user_collect.find( { age : { $gte: 20 } } )
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c57"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c58"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >
    >
    >
    # ageが20より少ない
    > db.user_collect.find( { age : { $lt: 20 } } )
    { "_id" : ObjectId("58e0441a3708943450405c54"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    >
    >

    # ageが20より以下
    > db.user_collect.find( { age : { $lte: 20 } } )
    { "_id" : ObjectId("58e0441a3708943450405c54"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    >
    >

    # like検索
    > db.user_collect.find( { user_id : /id00/} )
    { "_id" : ObjectId("58e0441a3708943450405c54"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e044243708943450405c55"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e044243708943450405c56"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e044323708943450405c58"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >
    >
    > db.user_collect.find( { user_id : /id001/} )
    { "_id" : ObjectId("58e0441a3708943450405c54"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    >
    >


    # in検索
    > db.user_collect.find( { "user_id" : { $in:["uid001","uid002"]}} )
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    >

    上のor検索もそうだけど、or検索やin検索の場合は、その後ろに[] で配列で条件を指定
    その中身はそれぞれ{}でくくると覚えておくといいかな


    # sort昇順
    > db.user_collect.find().sort({age:1})
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a5"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a6"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >
    >
    >
    # sort降順
    > db.user_collect.find().sort({age:-1})
    { "_id" : ObjectId("58e05486aa5f6141259db9a6"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a5"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 20, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    >

    sortは、findの外
    sortはfindの時もそうだけど、していするばあいは({}) と外は{}で、中は{}でくくる必要がある





    # 更新
    > db.user_collect.update({user_id:"uid002"},{$set:{ age:21 }})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    >
    > db.user_collect.find()
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 21, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a5"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a6"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >


    # 削除 remove()
    > db.user_collect.find()
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a3"), "user_id" : "uid002", "age" : 21, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a5"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a6"), "user_id" : "uid005", "age" : 50, "status" : "C" }

    > db.user_collect.remove( { user_id:"uid002"} )
    WriteResult({ "nRemoved" : 1 })


    > db.user_collect.find()
    { "_id" : ObjectId("58e05486aa5f6141259db9a2"), "user_id" : "uid001", "age" : 10, "status" : "A" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a4"), "user_id" : "uid003", "age" : 30, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a5"), "age" : 40, "status" : "B" }
    { "_id" : ObjectId("58e05486aa5f6141259db9a6"), "user_id" : "uid005", "age" : 50, "status" : "C" }
    >



    # 現在のデータベース状況を知る(ステータスじゃないよ、統計のstatsだよ)
    > db.stats()
    {
    "db" : "test",
    "collections" : 0,
    "objects" : 0,
    "avgObjSize" : 0,
    "dataSize" : 0,
    "storageSize" : 0,
    "numExtents" : 0,
    "indexes" : 0,
    "indexSize" : 0,
    "fileSize" : 0,
    "ok" : 1
    }
    >

    # データベース一覧
    show dbs

    # mongodbでは RDBでいう、create database、create tableは必要ない
    use データベース名
    でそのデータベース名にスイッチするが、その時点で存在してなくていい



    MongoDBのデータ構造とRDBのデータ構造の比較
    ---------------------------------------------------
    RDBでの呼称 → MongoDBでの呼称
    ・database → database
    ・table → collection
    ・row → document
    ・column → field
    ・index → index
    ・primary key _→ id field
    ※ MongoDBでは,"_id"の値に自動的に一意な文字列が採番される。
    ---------------------------------------------------
    mongodbでは操作する際に、つねにフィールド名(カラム名)の指定が必要。
    つまりカラム名もいっしょにその都度登録される。
    そのため、RDBとMongoDBの大きな違いとして
    RDBではテーブル中のすべてのレコードが同じカラムを有するのに対し,
    MongoDBではドキュメントごとに自由なフィールドを定義できる



    データベース操作
    MySQL MongoDB
    > SHOW DATABASES; > show dbs
    > USE testdb; > use testdb
    > CREATE DATABASE testdb; useコマンドで自動生成
    > DROP DATABASE testdb; > use testdb
    > db.dropDatabase()
    > DESC testdb; なし



    > show collections
    system.indexes
    user_collect

    > show dbs
    aaaaa 0.078GB
    local 0.078GB
    testdb 0.078GB
    >
    category:mongodb | by:ittoocomments(0)trackbacks(0) | -

    mongodbインストール方法メモ

    2017.04.02 Sunday 10:52
    0
      /etc/yum.repos.d/mongodb-org-3.0.repoを作成

      [mongodb-org-3.0]
      name=MongoDB Repository
      baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
      gpgcheck=0
      enabled=1

      # mongodb インストール
      yum install mongodb-org

      # mongodb 起動
      systemctl start mongod

      # mongodb 停止
      systemctl stop mongod

      # mongodb 自動起動
      chkconfig mongod on

      # mongodb ログイン
      mongo

      # 現在のデータベース状況を知る(ステータスじゃないよ、統計のstatsだよ)
      > db.stats()
      {
      "db" : "test",
      "collections" : 0,
      "objects" : 0,
      "avgObjSize" : 0,
      "dataSize" : 0,
      "storageSize" : 0,
      "numExtents" : 0,
      "indexes" : 0,
      "indexSize" : 0,
      "fileSize" : 0,
      "ok" : 1
      }
      >

      # データベース一覧
      show dbs

      # mongodbでは RDBでいう、create database、create tableは必要ない
      use データベース名
      でそのデータベース名にスイッチするが、その時点で存在してなくていい

      #


      MongoDBとRDBの用語比較(厳密には異なる)

      MongDB RDB
      データベース データベース
      コレクション テーブル collections は RDBの テーブル
      ドキュメント 行(レコード)
      フィールド 列
      category:mongodb | by:ittoocomments(0)trackbacks(0) | -

      ad
      Calender
            1
      2345678
      9101112131415
      16171819202122
      23242526272829
      3031     
      << July 2017 >>
      Selected entry
      PR
      Category
      Archives
      Recent comment
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        66hills
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        ssd
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        max
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        DOM
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        DOM
      • コンピュータ業界の根本的な変化
        cloud
      • コンピュータ業界の根本的な変化
        Dellの仮想化
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        えちごや
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        touch
      • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
        bob77777
      Recent trackback
      • スマートフォンの法人活用例
        無線LANネットのブログ
      • Yahoo!オークションからのアフィリエイト収入が一気に70%減になってしまい涙目になってる話
        特選情報
      Recommend
      Link
      Profile
      Search
      Others
      Mobile
      qrcode
      Powered
      無料ブログ作成サービス JUGEM