🥬

MongoDBのことはじめ

2024/10/09に公開

これはなに?

データエンジニアリング/データハンドリング力を強化する目的で、NoSQLデータベースとして代表的なMongoDBを触ってみました。公式のチュートリアルを一つづつ動作確認しました。

次のステップ:
データ分析100本ノックのようなデータハンドリングをMongoDBでやってみてもいいかも。

環境構築

今回はローカル(MacBook Air M2)のDocker上で簡単に構築しました。

dockerを立てて、コンテナ内に入ります。

$ docker run --name some-mongo -d mongo:latest
$ docker exec -it some-mongo bash

コンテナ内部で、MongoDBのCLIである、mongoshが入っていることを確認

mongosh --version
> 2.2.2

DBとコレクション構築

まずはdbを確認します。

test> show dbs

操作対象のdbを指定。ここではblogを作成

test> use blog

collectionを作成(テーブルみたいなもの?)

blog> db.createCollection("posts")

オブジェクト挿入

作成したコレクション(posts)にobjectを挿入する
複数を挿入したければ、insertManyを使用

blog> db.posts.insertOne({
    title: "post title 1",
    body: "Body of post.",
    category: "News",
    likes: 1,
    tags:["news", "events"],
    date: Date()
    })

キーで検索

オブジェクト内部の特定のキーと値で検索することができる。
関係テーブルのように、キーが固定されていなくても使用できるのがメリット

# 全検索
blog> db.posts.find()
# categoryがNewsのオブジェクトを表示
blog> db.posts.find({category: "News"})

射影

1を指定するとinclude, 0を指定するとexcludeされる

blog> db.posts.find({}, {title:1, date:1})

更新

updateできる。特定のtitleのオブジェクトについて、likesを2に変更

blog> db.posts.updateOne( { title: "Post Title 1" }, { $set: { likes: 2 } } )

集計

blog> db.posts.aggregate([
// Stage 1: likeが1以上のオブジェクトを検索
     {
         $match: { likes: { $gt: 1 } }
      },
// Stage 2: ドキュメントをcategory軸で集計し、likeの合計を計算
       {
         $group: { _id: "$category", totalLikes: { $sum: "$likes" } }
       }
 ])

--- 出力 ---

[
  { _id: 'Event', totalLikes: 6 },
  { _id: 'Technology', totalLikes: 3 },
  { _id: 'News', totalLikes: 2 }
]

まとめ

Mongodbの基本的なコマンドを確認しました。
今後はアプリで利用するなど、実践でも活用できるように準備していきたいと思います。

Discussion