1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ドキュメント型 NoSQL「MongoDB」のコマンドの使い方(Windows版)

Last updated at Posted at 2024-01-07

MongoDB_Logo.svg.png

1. MongoDBとは

  • MongoDBは、米国の10gen社(現MongoDB Inc.)によって開発された、ドキュメント指向型のNoSQLデータベース。
  • C++言語で開発されており、Linux/Windows/Macなど各種プラットフォームに対応している。
  • JSON形式のドキュメントでデータを管理するので、階層構造や、複数のデータ型を同一フィールドとした複雑なデータ構造も扱うことができる。
  • 動的にドキュメントの構造を変更できるため、柔軟なデータベース設計が可能となる。
  • SQLクエリは使用できない。集計、複数データの結合(JOIN)ができない。
  • 複数のデータを同時に更新するような、一貫性(整合性)のある更新処理ができない。
  • ログの蓄積、データ構造が可変するシステム、単純な低負荷の読み取り/更新が大量にあるようなシステム(例:ソーシャルゲーム、SNSなど)に向いている。

2. MongoDBの導入(前準備)

  • MongoDBをWidnowsローカルマシン上で動かします。MongoDBのサーバとクライアントのインストールファイルを各々ダウンロードして導入する。

MongoDB Community Server Download:
https://www.mongodb.com/try/download/community

MongoDB Shell Download(CUI コマンドライン版):
https://www.mongodb.com/try/download/community

MongoDB Compass Download (GUI版):
https://www.mongodb.com/try/download/compass

3. MongoDBサーバの起動

  • Windows版をインストールした場合は、サービスで自動実行されています。
  • サービスを手動実行する場合は、「コントロール・パネル」 > 「サービス」 を開き、リストから MongoDB サービスを見つけ、起動/停止ボタンを使用する。 または、コマンドプロンプトより下記のコマンドでMongoDBを起動する。
     MongoDBのサービスを「起動」する場合(※管理者として実行)
> sc start MongoDB

MongoDBのサービスを「停止」する場合(※管理者として実行)

> sc stop MongoDB

4. MongoDBクライアントの起動

  • MongoDB Shell(mongosh.exe)を起動する。ローカルにMongoDBサーバをインストールした場合は、exeファイルをダブルクリックするか、コマンドラインより「mongosh」とタイプして起動する。
> mongosh

デフォルトで使用するデータベースを指定しない場合、mongoshは”test”データベースをデフォルトで使用しするので、プロンプトに “test>” と表示される。

  • ローカル環境とは別のサーバにMongoDBサーバをインストールした場合は、MongoDBサーバのホスト名(またはIPアドレス)、ポート番号、データベース名を指定して起動する。
> mongosh "mongodb://ホスト名:ポート番号/データベース名"

5. MongoDBコマンド

コマンドラインのMongoDB Shellのコマンドを使って、MongoDBを操作する方法について説明します。

■ データベースの一覧表示

show dbs(または show databases)でデータベースの一覧を確認する。

test> show dbs;
admin    40.00 KiB
config   60.00 KiB
local    72.00 KiB
mydb     **.** KiB
■ データベースの作成/切り替え

use db名:データベース名が存在する場合は切り替え、存在しない場合は新規作成

「mydb」という名前でデータベースを作成する。

test> use mydb;
switched to db mydb
■ コレクションの作成

「test_c」という名前でコレクションを作成する。

mydb> db.createCollection("test_c");
{ ok: 1 }
■ コレクションにドキュメント(データ)を登録

「test_c」コレクションに

  • { name: "太郎", age: 25, place:"東京都" }
  • { name: "花子", age: 25, place:"千葉県" }
    というドキュメント(データ)を登録する。
mydb> db.test_c.insertOne({ name: "太郎", age: 25, place:"東京都" });
{
  acknowledged: true,
  insertedId: ObjectId('659ae5788bcbc0db16bdab7d')
}
mydb> db.test_c.insertOne({ name: "花子", age: 29, place:"千葉県" });
{
  acknowledged: true,
  insertedId: ObjectId('659ae6f58bcbc0db16bdab7e')
}
■ コレクションのドキュメント数(データ数)を確認

ドキュメントのドキュメント数(データ数)をカウントする。

mydb> db.test_c.count();
2
■ コレクションの全ドキュメント内容を確認

ドキュメントのドキュメント数(データ数)をカウントする。

mydb> db.test_c.find();
[
  {
    _id: ObjectId('659ae5788bcbc0db16bdab7d'),
    name: '太郎',
    age: 25,
    place: '東京都'
  },
  {
    _id: ObjectId('659ae6f58bcbc0db16bdab7e'),
    name: '花子',
    age: 29,
    place: '千葉県'
  }
]
■ データのフィルタリング(検索)

.find関数に引数を指定することで、特定の条件を持っているデータのみをフィルタ検索できる。

  • name(名前)が「太郎」のデータを検索する。
mydb> db.test_c.find({name:"太郎"});
[
  {
    _id: ObjectId('659ae5788bcbc0db16bdab7d'),
    name: '太郎',
    age: 25,
    place: '東京都'
  }
]
  • age(年齢)が30歳より下のデータを検索する。
mydb> db.test_c.find({age:{"$lt":30}});
[
  {
    _id: ObjectId('659ae5788bcbc0db16bdab7d'),
    name: '太郎',
    age: 25,
    place: '東京都'
  },
  {
    _id: ObjectId('659ae6f58bcbc0db16bdab7e'),
    name: '花子',
    age: 29,
    place: '千葉県'
  }
]
  • age(年齢)が25歳より上のデータを検索する。
mydb> db.test_c.find({age:{"$gt":25}})
[
  {
    _id: ObjectId('659ae6f58bcbc0db16bdab7e'),
    name: '花子',
    age: 29,
    place: '千葉県'
  }
]
■ ドキュメント(データ)の更新

アップデートするドキュメント(データ)が、
1件の場合:updateOne
複数個の場合:updateMany
を利用する。

  • name(名前)が「太郎」のage(年齢)を25歳→29歳に更新する。
mydb> db.test_c.updateOne({name:"太郎"},{$set:{age:29}});
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}
  • age(年齢)が29歳のドキュメント(データ)について、地域(place)を全て「神奈川県」に更新する。
mydb> db.test_c.updateMany({age:29},{$set:{place:"神奈川県"}});
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 2,
  modifiedCount: 2,
  upsertedCount: 0
}
  • .find関数で、複数データが更新されたか確認する。
mydb> db.test_c.find();
[
  {
    _id: ObjectId('659ae5788bcbc0db16bdab7d'),
    name: '太郎',
    age: 29,
    place: '神奈川県'
  },
  {
    _id: ObjectId('659ae6f58bcbc0db16bdab7e'),
    name: '花子',
    age: 29,
    place: '神奈川県'
  }
]
■ ドキュメント(データ)の削除

削除するするドキュメント(データ)が、
1件の場合:deleteOne
複数個の場合:deleteMany
を利用する。

  • name(名前)が「花子」のドキュメント(データ)を削除する。
mydb> mydb> db.test_c.deleteOne({"name":"花子"})
{ acknowledged: true, deletedCount: 1 }
■ コレクションの一覧表示
  • 現在使用しているデータベースのコレクションの一覧を表示する。
mydb> show collections;
test_c
■ コレクションの削除
  • コレクションを削除する。
mydb> db.test_c.drop();
true

以上

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?