-
【初心者向け】MongoDBの特徴と使い方
- 2025年1月6日
- MongoDB
- NoSQL
- 初心者向け
はじめに
データベースで最も主流なのは、RDBMS(リレーショナル型データベース)ですが、昨今では非リレーショナル型である、NoSQLが利用される動きも出てきています。
特にMongoDBは、NoSQLの中でも広く利用されているドキュメント指向データベースです。
本記事では、MongoDBの特徴や基本的なクエリ方法について紹介します。
これにより、初学者がMongoDBについて理解を深めることを目的としています。
MongoDBの主な特徴
1. ドキュメント指向データベース
レコードを行と列で保存するのではなく、「ドキュメント」と呼ばれる構造的データをJSONライクな形式で表現し、そのドキュメントの集合を「コレクション」として管理します。
同じコレクション内の各ドキュメントのデータに違う項目のデータを入れることもできます。
2. NoSQLなので、SQLは使用できない
RDBMSでデータのやり取りに使用するSQLが、MongoDBでは使用できません。
(SQL クエリ形式をNoSQL (MongoDB) クエリ形式に変換するツールは存在します)
SQLクエリからMongoDBへの変換ができるサイト:site24x7 ツール
3. スケールアウトが可能
MongoDBは、データを複数のサーバーに分割して保存・処理できる機能を備えています。
そのため負荷を複数のサーバーに分散して、全体としての処理能力を向上させることが可能です。
4. 膨大なデータを高速に処理することが可能
通常のデータベースはデータをディスクから読み書きしますが、MongoDBはよく使うデータをメモリに置いて処理します。
メモリはディスクよりもずっと高速なので、データの読み書きが格段に速くなります。
5. トランザクションの信頼性は低い
BASEの性質を持つため、厳しい制約はありません。
そのため、大量のデータを分散させ、高速に処理することができます。
BASEの性質
⚫︎基本的に可用(Basically Available) 基本的にいつでも利用することが可能であるという性質。
一部のコンポーネントが故障していても、システムは基本的には機能する。
⚫︎ソフト状態(Soft-State) 常に一貫性を保っている必要はないという性質。
一時的に一貫性が担保されないことはある。
⚫︎結果整合性(Eventual consistency) 原子性を持って一貫性を保証しなくとも、結果的に一貫性が
保証できていればいいという性質。
MongoDBクエリの基本
基本操作
検索(find)
db.getCollection('コレクション名').find( { 条件 } )
更新(update)
第3引数はupsert(レコードが存在していなければINSERT, 存在すればUPDATE)に対するオプション、第4引数はmultiに関するオプションです。
multiオプションとは
MongoDBの場合、デフォルトでは条件に当てはまる一番初めのレコードしか更新されません。
そのため、条件にあてはまる全てのレコードに対して更新を行いたい場合は第4引数のmultiオプションをtrueにする必要があります。
db.getCollection('コレクション名').update( { 条件 }, { 演算子 : { 更新内容 } }, false, true)
更新の際に使用する演算子
演算子 | 内容 | 使い方 |
---|---|---|
$set | 値の設定 | $set: { key: 値, … } |
$inc | 値の加算(減算) | $inc: { key: 加算値, …} |
$mul | 値の乗算(除算) | $mul: { key: 乗算値, …} |
$unset | 値の削除 | $unset: { key: 値, …} |
削除(remove)
db.getCollection('コレクション名').remove( { 条件 } )
演算子
比較演算子
演算子 | 内容 |
---|---|
$eq | 等しい |
$ne | 等しくない |
$gt | より大きい(greater than) |
$lt | より小さい(less than) |
$gte | 以上 |
$lte | 以下 |
$in | 配列に含まれる |
$nin | 配列に含まれない |
イコール条件で抽出する場合、 $eq
なしでも使用できます。
db.getCollection('collection_name').find({ key: 'value' })
0 ≦ age < 18(0 以上 18 未満)を抽出する例:
db.getCollection('users').find({
age: {
$gte: 0,
$lt: 18
}
})
論理演算子
演算子 | 内容 |
---|---|
$and | すべての条件を満たす |
$or | いずれかの条件を満たす |
$not | 条件を否定する |
$nor | すべての条件を満たさない |
AND検索は条件を ,
でつなげることでも使用できます。
db.getCollection('users').find({
{ age: 20 },
{ country: 'US' }
})
$or
演算子を使用した例:
db.getCollection('users').find({
$or : [
{ age: 20 },
{ country: 'US' }
]
})
活用事例
eBay
アメリカのEC企業。世界中で1.6億人、Sellerは2,500万人とインターネットオークションでは世界最多の利用者を持っています。
サイト内検索のサジェスト機能、クラウド管理、メタデータ保存など、さまざまな用途でMongoDBを使用しています。
参考記事: eBay: Building Mission-Critical Multi-Data Center Applications with MongoDB | MongoDB
Shutterfly
人気の写真共有プラットフォーム。
MongoDB と AWS 上に構築された Shutterfly の新しいプラットフォームは、現在では 1 分あたり数千件のリクエストを処理でき、クリスマスやバレンタインデーなどの重要な日付の季節的な需要のピークに合わせて簡単に拡張できます。
参考記事: Shutterfly Brings Scalability And User Experience Into Focus With MongoDB Atlas On AWS | MongoDB
まとめ
この記事では、MongoDBの特徴や基本的なクエリ方法について紹介しました。
今後、データの規模や処理方法がますます複雑化する中で、MongoDBのようなNoSQLデータベースの重要性はさらに高まると予想されます。
一方で、MongoDBはRDBMSのように厳密なデータの一貫性を保持する設計ではないため、すべてのシステムに適しているわけではありません。使用する際は、システムとの適合性を十分に検討することが重要です。
さいごに
ソリューションウェアでは、さまざまな分野の案件を幅広く持ち合わせておりスキルアップには最適の環境です。
自身のスキル向上に悩んでいる方、エンジニアとしてもう一皮むけたいと考えている方、私たちと一緒に働きませんか?
「まずはカジュアルにお話だけ」というのも可能ですので気になる方は応募フォームよりお申込みください。
この記事を書いた人 : ブログチーム
AWS bluebird css CSV docker docker compose electron ES6 es2015 Git Heroku ITコンサルティング JavaScript justinmind less MongoDB Node.js php PostgreSQL Private Space Promise React react-router reactjs Salesforce scss Selenium Builder selenium IDE Selenium WebDriver stylus TypeScript VirtualBox VisualStudioCode vue vuejs webpack システム開発プロジェクト セキュリティ ワイヤーフレーム 上流工程 卒FIT 帳票 要件定義 設計 電力小売業界