🥬
MongoDBのことはじめ
これはなに?
データエンジニアリング/データハンドリング力を強化する目的で、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