MongoDB

Page content

Reference

mongoDBの構造

MongoDB
  +--データベース
  |  +--コレクション
  |  |  +--ドキュメント
  |  |  +--ドキュメント
  |  |
  |  +--コレクション
  |  |  +--ドキュメント
  |
  +--データベース
  |  +--コレクション
  • 接続
    $ mongo
    
  • DB一覧
    > show dbs
    
  • DB作成, DB接続
    > use test
    
  • コレクションの一覧取得
    • 今んとこ2パターン知ってる
      > db.getCollectionNames()
      > show collections
      
  • ドキュメントのinsert
    > db.testcoll.insert( { "key1" : "string", "key2" : 123 } )
    

「db」は指定したデータベースを表し,「db.testcoll」でコレクションを指定しています。そして,このコレクションのメソッドである「insert()」を呼び出しています。

  • もうひとつ、次はハッシュと配列の混ざったドキュメントを入れてみます。
    > db.testcoll.insert( { "array" : [ "sun", "mon" , "tue" ] } )
    
    MongoDBはスキーマレスですので,このようにいろいろなデータをドキュメントとして格納できます。

ドキュメントの参照

ドキュメントの参照はコレクションのfind()メソッドを使います。

  • ドキュメント全部を参照

    > db.testcoll.find()
    { "_id" : ObjectId("517decee15e3c1b8b1f82c5f"), "key1" : "string", "key2" : 123 }
    { "_id" : ObjectId("517dee5215e3c1b8b1f82c60"), "array" : [ "sun", "mon", "tue" ] }
    
  • 最初のドキュメントのみ取得

    > db.testcoll.findOne()
    {
            "_id" : ObjectId("517decee15e3c1b8b1f82c5f"),
            "key1" : "string",
            "key2" : 123
    }
    
  • ドキュメントに対してハッシュキーを引数に渡すことにより,値を取り出すことができます。

    > db.testcoll.findOne()["key1"]
    string
    

    この文法はJavaScriptと同じです。 実はMongoDBはJavaScriptの実行環境を備えているため, JavaScriptと同じ文法を利用可能です。

  • ドキュメントの検索

    > db.col1.find( { "name" => /mongo/ } )
    
  • databaseの削除: databaseに接続してからdropをする

    > use dbname_to_be_deleted
    > db.dropDatabase()
    
  • collectionの削除

    > db.mycollection.drop()
    
  • データの削除

    > db.[コレクション名].remove( [削除するオブジェクト] )
    

    の形式で実行します。 削除するオブジェクトを指定しない場合は、 コレクション内全てのデータが削除されます。

  • データの修正 update

    > db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    
    • : 検索条件。matchしたdocumentsをupdateの対象とする
    • : the moddification to apply. $set
    • upsert : if set to “true”, creates new document if no existing doc matches. Default = “false”
    • multi : if set to “true”, apply modification to matched multiple docs. Default = “false”
    • writeConcern: ???
  • updateの例:

    • 修正対象: { “_id” : 11, “item” : “Divine Comedy”, “stock” : 2 }
    • 実行: priceを18に。stockを+5する。
      db.books.update(
        { item: "Divine Comedy" },
        {
          $set: { price: 18 },
          $inc: { stock: 5 }
        }
      )
      
  • WEB Consoleの紹介

  • オブジェクトID MongoDBの各ドキュメントは、 _id という、 自分自身を識別するためのユニークキーを持っています。 この値は通常BSONオブジェクトです。

  • sort ソート 並んでいる順番(natural order)の逆順にする。 時刻などでやるほうが正確だが、この方が速いので、 ざっくり逆順に出したいときはこれ。

    db.Hoge.find().sort({ $natural: -1 });
    
  • キーのrename 以下の様なレコードを大量に作ってしまった。 filterという名前のキーは微妙なので、markという名前に変えたい。

    {
      "_id" : ObjectId("51b6d0a4954e5d414a000602"),
      "facility" : "authpriv",
      "host" : "srv-perf1",
      "logtime" : "Jun 11 16:20:33",
      "filter" : "matched",
      "message" : "pam_unix(sshd:session): session closed for user munin",
      "pid" : "24366",
      "proc" : "sshd",
      "severity" : "info",
      "time" : ISODate("2013-06-11T07:24:19Z")
    }
    
    • コマンド:
    > db.syslog2.update({},{$rename:{"filter":"mark"}}, false, true);
    

    出来た!ス・テ・キ c(`Д´c)