記事

ちなみにTwitterではこんな画像がバズる始末
copilot

調べた

シャーディングって何?

GridFSって何?

MongoDBについて

  • 皆さんおなじみNoSQLのドキュメント思考データベース
  • NoSQLなので、SQLは使用できない。クエリはJavaScriptで行う
  • バックアップの方法は2種類

    • データファイルをコピーする
    • mongodumpを利用する
  • やってみようNoSQL MongoDBを最速で理解する

Cloud9って何?

  • ブラウザのみでコードを記述、実行、デバッグできるクラウドベースの統合開発環境

    • コードエディタ、デバッガー、ターミナルが含まれている
  • 使ってみた感じ、EC2の上で動かせるので、VPCとかセキュリティグループとかうまいことやれば、DocumentDBへの接続とかはすごい簡単にできた

  • しかも環境の共有もできるので、他の人にすぐに使ってもらえる
  • AWS Cloud9 を活用したら、個人開発が捗った話

DocumentDBいじってみた

AWSの公式のチュートリアルに基づいてやってみた(Cloud9のCLIでDocumentDBを動かす感じ)
コマンド関係はQiitaの記事も参照した

基本的にInsertは次の形

// db.(コレクション名).insert(json)っていう形でデータを投入する
db.collection.insert({"hello":"DocumentDB"})
db.testcoll.insert( { "key1" : "value1", "key2" : "value2" } )

Selectは次の形

db.collection.findOne()
// { "_id" : ObjectId("5e401fe56056fda7321fbd67"), "hello" : "DocumentDB" }

db.testcoll.find()
// { "_id" : ObjectId("5c6198f6fb5e83ffaa3ba044"), "key1" : "value1", "key2" : "value2" }

コレクション名に対して参照するんやな

idを指定せずにinsertしたものに関しては、getの時にはidはユニークなオブジェクトIDが振られるっぽい

複数突っ込む場合はこんな感じ

db.profiles.insertMany([
	{ "_id" : 1, "name" : "Tim", "status": "active", "level": 12, "score":202},
	{ "_id" : 2, "name" : "Justin", "status": "inactive", "level": 2, "score":9},
	{ "_id" : 3, "name" : "Beth", "status": "active", "level": 7, "score":87},
	{ "_id" : 4, "name" : "Jesse", "status": "active", "level": 3, "score":27}
])

idを指定してあげると、selectしてあげた時もidで引っ張ってこれる

db.profiles.find()
// { "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 202 }
// { "_id" : 2, "name" : "Justin", "status" : "inactive", "level" : 2, "score" : 9 }
// { "_id" : 3, "name" : "Beth", "status" : "active", "level" : 7, "score" : 87 }
// { "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 } 

ドキュメントのクエリからも引っ張ってこれる

db.profiles.find({name: "Jesse"})
// { "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 }

findAndModifyコマンドで更新を行う

// Timのscoreを10点加算
db.profiles.findAndModify({
   query: { name: "Tim", status: "active"},
   update: { $inc: { score: 10 } }
})

結果

db.profiles.find({name: "Tim"})
// { "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 212 } ←加算されてる