当サイトは、アフィリエイト広告を利用しています

【Docker × MongoDB】コンテナでMongoDBを作って操作してみる~mongosh~

作成日:2024月06月07日
更新日:2024年06月23日

Dockerを使ってMongoDBコンテナを作成し、MongoDBを操作してみる
MongoDBの操作は

  • mongosh
  • mongo-express

でがあるが、今回はmongoshで実行してみる

最終的にはPythonのpymongoなどを使って、プログラムから
操作することになるが、まずはMongoDBの仕組みや動きを見るために
mongoshで操作する
※プログラムで実装した後も確認等をするときに使えるので

mongo-expressでの操作方法に関しては下記記事で紹介している
MongoDBのデータ構造をつかむにはmongo-expressで見た方がわかりやすい

MongoDBとは?

MongoDBはNoSQLは、従来のリレーショナルデータベース(RDB)とは
異なる方法でデータを処理・操作する

ドキュメント指向型

MongoDBはNoSQLのドキュメント指向型のDBで
JSONやXMLといったデータ形式で記述されたドキュメントの形でデータを管理する。

利点としてはJSONやXMLといったデータ形式でかつ階層構造を持たず、相互の関係が横並びに管理
されるため、複雑な構造を持つさまざまなデータを保存することができる

MongoDBのデータ構造

ドキュメント指向型のMongoDBではデータを

  • データベース
  • コレクション
  • ドキュメント
  • フィールド

の単位で扱う

MongoDBのデータ

下記はMongoDBのデータをjson形式でexportしたもの。

MongoDBのデータサンプル
// コレクション
[
 //ドキュメント
{
// フィールド
"_id": { "$oid": "6661ddc1ddb6cfaedf9ec54f" },
"user_id": "1",
"name": "mori",
"age": 20
},
//ドキュメント
{
// フィールド
"_id": { "$oid": "6661ddc1ddb6cfaedf9ec552" },
"user_id": "4",
"name": "ayatuji",
"age": 99
}
]

データベース

データベース。
一番大きな単位。これはRDBと同じ

コレクション

コレクションはRDBでいうことろのテーブルに相当する
ドキュメントの集まり
上記のMongoDBのデータサンプルの配列の部分

ドキュメント

ドキュメントはRDBでいうことろのレコードに相当する
上記のMongoDBのデータサンプルの配列内のオブジェクトの部分

フィールド

ドキュメントはRDBでいうことろのカラムに相当する
MongoDBのデータサンプルのオブジェクトの属性部分

mongoshとは?

mongosh(MongoDB Shell)は、MongoDB用のシェルのこと。
MongoDBデータベースに対してコマンドを実行し、データの操作やクエリの実行、
スクリプトの実行などを行うためのツール。

mongoshはMongoDB 4.4から正式に導入された
以前のバージョンのMongoDBでは、従来のmongoシェルが使われていたみたい

環境

下記の環境で行う

  • Windows11
  • Docker version 26.1.1(Docker for Windows)
  • VScode
  • Remote Development(VScodeの拡張機能)

WindowsでDocker for Windowsを使って行う

プロジェクト構成

下記のような構成にする

プロジェクト構成
.
|-- docker-compose.yml
`-- mongo
|-- db
`-- init
`-- init-db.js
  • コンテナ作成用にdocker-compose.ymlを用意する
  • mongodb用にmongoディレクトリを作っておく

MongoDBのコンテナ環境を作成する

docker-composeを使って

  • MongoDBコンテナ

を作ってデータを確認してみる

docker-compose.yml

コンテナの設定をする

docker-compose.yml
version: "3"
services:
# MongoDBコンテナ
mongodb:
container_name: "mongodb"
restart: always
image: mongo:6.0.13
ports:
- "27017:27017"
volumes:
- ./mongo/init:/docker-entrypoint-initdb.d # 初期化スクリプト
- mongoDataStore:/data/db # MongoDBのデータファイル
# - ./mongo/db:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: admin # MongoDBの管理者のユーザー名
MONGO_INITDB_ROOT_PASSWORD: admin123 # MongoDBの管理者のパスワード
MONGO_INITDB_DATABASE: mongotable # 初期DBの作成
# 名前付きボリューム
volumes:
mongoDataStore:
name: mongoDataStore
  • MongoDBのデータは名前付きボリュームで管理する

/data/dbについて

MongoDBのデータの保存場所
名前付きボリュームではなく、バインドマウントにしたい場合はコメントアウト
している方を使う

docker-entrypoint-initdb.dについて

docker-entrypoint-initdb.dにShell ScriptかJavaScriptで
書いたスクリプトがあれば、コンテナ起動時に実行してくれるのでホストから
バインドマウントしている

初期化時にユーザーを作りたい、またはDBに初期データを入れたい
時に使える

init-db.jsについて

初期化スクリプト

init-db.js
// init-db.js
// 管理者ユーザーでログイン
db = db.getSiblingDB("admin");
db.auth("admin", "admin123");
// 新しいユーザーを作成
db.createUser({
user: "example_user",
pwd: "password123",
roles: [{ role: "readWrite", db: "mongotable" }],
});
// mongotable データベースに接続する
db = db.getSiblingDB("mongotable");
// コレクションを作成する
db.createCollection("example_collection");
// サンプルドキュメントを挿入する
db.example_collection.insertOne({
key: "value",
});
print("Initialization completed.");
  • ユーザー作成
  • DBにコレクションを追加

MongoDBはdbに少なくも1つのコレクションをがないとデータベースとして
認識しないので、MONGO_INITDB_DATABASEで設定している「mongotable」に
対して初期化スクリプトでコレクションを作成している。
※この初期化スクリプトがないとmongotableは作成されない

mongoshで操作する

docker-compose.ymlで作成したMongoDBコンテナを
mongoshで操作してみる

ログイン

mongodbコンテナにログインする

mongodbコンテナログイン
docker exec -it mongodb sh

MongoDBへのログインは下記で行う

ログイン構文
# 構文
mongosh mongodb://<username>:<password>@<host>:<port>/<authenticationDatabase>
# サンプル
mongosh mongodb://admin:admin123@localhost:27017/admin
  • <username>: MongoDBのユーザー名
  • <password>: ユーザーのパスワード
  • <host>: MongoDBサーバーのホスト名またはIPアドレス
  • <port>: MongoDBサーバーのポート番号
  • <authenticationDatabase>: 認証データベースの名前(省略可能)

docker-compose.ymlのmongodbで設定した値を使う

mongodbコンテナからログイン
# mongodbコンテナに入る
$ docker exec -it mongodb sh
# momgodbにログイン
$ mongosh mongodb://admin:admin123@localhost:27017/admin
Current Mongosh Log ID: 665f1afae7800cfcf66aa071
Connecting to: mongodb://<credentials>@localhost:27017/admin?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.4
Using MongoDB: 6.0.13
Using Mongosh: 2.1.4
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2024-06-04T13:47:06.337+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2024-06-04T13:47:07.606+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2024-06-04T13:47:07.606+00:00: vm.max_map_count is too low
------
admin>

<authenticationDatabase>でadminを指定しているので
adminデータベースに入っている

db関連の操作

データベースに関連する操作をまとめる

show dbs

dbの一覧を出力する

一覧
admin> show dbs
admin 100.00 KiB
config 72.00 KiB
local 72.00 KiB
mongotable 40.00 KiB

初期化スクリプトで作ったmongotableが作成されている

use db名

操作したいdbへ切り替える

db移動
admin> use mongotable
switched to db mongotable
mongotable>

use db名

dbを新規作成する

db作成
# db作成
mongotable> use testdb
switched to db testdb
# コレクション作成
testdb> db.createCollection('COL');
{ ok: 1 }
# 一覧出力
testdb> show dbs
admin 100.00 KiB
config 108.00 KiB
local 72.00 KiB
mongotable 40.00 KiB
testdb 8.00 KiB

コレクションが無いとDB一覧には出ない

db.dropDatabase

dbを削除する

bash
# DBの削除
testdb> db.dropDatabase()
{ ok: 1, dropped: 'testdb' }
# db一覧出力
testdb> show dbs
admin 100.00 KiB
config 108.00 KiB
local 72.00 KiB
mongotable 40.00 KiB

testdbが削除されている

コレクション関連の操作

コレクションに関する操作をまとめる

show collections

dbのコレクション一覧を出力する

コレクション一覧
mongotable> show collections
example_collection

初期化スクリプトで作ったコレクションが作成されている

db.createCollection

db内にコレクションを作成する

コレクション作成
# db移動
admin> use mongotable
switched to db mongotable
# コレクション作成
mongotable> db.createCollection('USERS')
{ ok: 1 }
# コレクション一覧
mongotable> show collections
example_collection
USERS

USERSコレクションが作成される

db.USERS.drop

コレクションを削除する

コレクション削除
# コレクション削除
mongotable> db.USERS.drop()
true
# コレクション一覧
mongotable> show collections
example_collection

USERSコレクションが削除される

ドキュメント関連の操作

ドキュメントに基本的な操作をまとめる
先にデータベースとコレクションを作成しておく

準備
# db作成
admin> use SAMPLDB
switched to db SAMPLDB
# コレクションを作成
SAMPLDB> db.createCollection('users')
{ ok: 1 }

find

条件で取得する場合はfindを使う

find構文
# 構文
db.<db名>.find(
# 抽出条件
{ <field1>: <value1>, ...}
)
# 実行文サンプル
db.users.find({age:50})
# 件数制限をつける場合
db.users.find({age:50}).limit(1)
# 全件取得の場合
db.users.find()

findOne

最初の1件だけ取得する場合はfindOneを使う

findOne構文
# 構文
db.<db名>.findOne(
# 抽出条件
{ <field1>: <value1>, ...}
)
# 実行文サンプル
db.users.findOne({age:50})

countDocuments

コレクションにあるドキュメント件数を取得する

countDocuments構文
# 構文
db.<db名>.countDocuments()
# 実行文サンプル
db.users.countDocuments()

insertOne

ドキュメントを単数登録する場合は「insertOne」を使う

insertOne構文
# 構文
db.<db名>.insertOne( { <field1>: <value1>, ...})
# 実行文
db.users.insertOne(
{user_id: "1", name: "tujimura", age: 11}
)

実行してみる

insertOne
// 実行前
SAMPLDB> db.users.find()
// 実行
SAMPLDB> db.users.insertOne(
... {user_id: "1", name: "tujimura", age: 11}
... )
{
acknowledged: true,
insertedId: ObjectId('66607a11ddb6cfaedf9ec50c')
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607a11ddb6cfaedf9ec50c'),
user_id: '1',
name: 'tujimura',
age: 11
}
]
  • ドキュメントが登録される

insertMany

ドキュメントを複数登録する場合は「insertMany」を使う

insertMany構文
# 構文
db.<db名>.insertMany(
{ <field1>: <value1>, ...},
{ <field1>: <value1>, ...}
)
# 実行文サンプル
db.users.insertMany([
{user_id: "2", name: "mori", age: 20},
{user_id: "3", name: "shimada", age: 50}
])

実行してみる

insertMany
// 実行前
SAMPLDB> db.users.find()
// 実行
SAMPLDB> db.users.insertMany([
... {user_id: "2", name: "mori", age: 20},
... {user_id: "3", name: "shimada", age: 50}
... ])
{
acknowledged: true,
insertedIds: {
'0': ObjectId('66607ab3ddb6cfaedf9ec513'),
'1': ObjectId('66607ab3ddb6cfaedf9ec514')
}
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607ab3ddb6cfaedf9ec513'),
user_id: '2',
name: 'mori',
age: 20
},
{
_id: ObjectId('66607ab3ddb6cfaedf9ec514'),
user_id: '3',
name: 'shimada',
age: 50
}
]
  • 複数ドキュメントが登録される

updateOne

updateOneを使って単数更新する。
条件に合うドキュメント複数ある場合は
最初の一つのみ更新する

updateOne構文
# 構文
db.<db名>.updateOne(
# 更新条件
{ <field1>: <value1>, ...},
# 更新内容
{ $set: { <field1>: <value1>, ...} } 
)
# 実行文サンプル
db.users.updateOne(
{ age: 50 },
{ $set: { name: 'kawahara' } }
)

実行してみる

updateOne
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607e0fddb6cfaedf9ec52f'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec530'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec531'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec532'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 実行
SAMPLDB> db.users.updateOne( { age: 50 }, { $set: { name: 'kawahara' } })
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607e0fddb6cfaedf9ec52f'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec530'),
user_id: '2',
name: 'kawahara',
age: 50
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec531'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('66607e0fddb6cfaedf9ec532'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
  • 最初の1件だけ更新されている

updateMany

条件に一致するもの全て更新したい場合は「updateMany」を使う

updateMany構文
# 構文
db.<db名>.updateOne(
# 更新条件
{ <field1>: <value1>, ...},
# 更新内容
{ $set: { <field1>: <value1>, ...} } 
)
# 実行文サンプル
db.users.updateMany(
{ age: 50 },
{ $set: { name: 'tanaka' } }
)

実行してみる

updateMany
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607effddb6cfaedf9ec533'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('66607effddb6cfaedf9ec534'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('66607effddb6cfaedf9ec535'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('66607effddb6cfaedf9ec536'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 実行
SAMPLDB> db.users.updateMany( { age: 50 }, { $set: { name: 'tanaka' } })
{
acknowledged: true,
insertedId: null,
matchedCount: 2,
modifiedCount: 2,
upsertedCount: 0
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('66607effddb6cfaedf9ec533'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('66607effddb6cfaedf9ec534'),
user_id: '2',
name: 'tanaka',
age: 50
},
{
_id: ObjectId('66607effddb6cfaedf9ec535'),
user_id: '3',
name: 'tanaka',
age: 50
},
{
_id: ObjectId('66607effddb6cfaedf9ec536'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]

複数更新されている

upsert

upsertを使うことで、存在する場合は更新、しない場合は追加することが
できる

upsert構文
# 構文
# 単数の場合
db.<db名>.updateOne(
# 更新条件
{ <field1>: <value1>, ...},
# 更新内容
{ $set: { <field1>: <value1>, ...} },
# upsert判定
{ upsert: true } 
)
# 複数の場合
db.<db名>.updateMany(
# 更新条件
{ <field1>: <value1>, ...},
# 更新内容
{ $set: { <field1>: <value1>, ...} },
# upsert判定
{ upsert: true } 
)
# 実行文サンプル
# 単数
db.users.updateOne(
{ age: 100 },
{ $set: { name: 'tomiyama' } },
{ upsert: true }
);
# 複数
db.users.updateMany(
{ age: 100 },
{ $set: { name: 'tomiyama' } },
{ upsert: true }
);

実行してみる
まずは存在しない場合

upsert(update)
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d44eddb6cfaedf9ec537'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec538'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec539'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec53a'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 更新(存在しない)
SAMPLDB> db.users.updateOne( { age: 100 }, { $set: { name: 'tomiyama' } }, { upsert: true });
{
acknowledged: true,
insertedId: ObjectId('6661d477698538801e02f221'),
matchedCount: 0,
modifiedCount: 0,
upsertedCount: 1
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d44eddb6cfaedf9ec537'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec538'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec539'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d44eddb6cfaedf9ec53a'),
user_id: '4',
name: 'ayatuji',
age: 99
},
{
_id: ObjectId('6661d477698538801e02f221'),
age: 100,
name: 'tomiyama'
}
]

次は更新する(存在する場合)

upsert(insert)
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d51bddb6cfaedf9ec53b'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53c'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53d'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53e'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 更新(存在する場合)
SAMPLDB> db.users.updateOne( { age: 50 }, { $set: { name: 'tomiyama' } }, { upsert: true });
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d51bddb6cfaedf9ec53b'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53c'),
user_id: '2',
name: 'tomiyama',
age: 50
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53d'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d51bddb6cfaedf9ec53e'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]

updateOneなので最初の1件のみ更新される
updateManyの場合は条件に一致するドキュメント全てが更新される

replaceOne

replaceはupdateと違い、ドキュメント自体を
置き換える。 ※置き換え前のフィールドが置き換え後にない場合は消える

replaceOneなので最初の一つのみが置き換え対象となる

replaceOne構文
# 構文
db.<db名>.replaceOne(
# リプレイス条件
{ <field1>: <value1>, ...},
# リプレイス内容
{ <field1>: <value1>, ...} 
)
# 実行文サンプル
db.users.replaceOne(
{ age: 50 },
{ name: 'tanaka' }
)

実行してみる

replaceOne
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d88bddb6cfaedf9ec543'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661d88bddb6cfaedf9ec544'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661d88bddb6cfaedf9ec545'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d88bddb6cfaedf9ec546'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 実行
SAMPLDB> db.users.replaceOne( { age: 50 }, { name: 'tanaka' })
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661d88bddb6cfaedf9ec543'),
user_id: '1',
name: 'mori',
age: 20
},
{ _id: ObjectId('6661d88bddb6cfaedf9ec544'), name: 'tanaka' },
{
_id: ObjectId('6661d88bddb6cfaedf9ec545'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661d88bddb6cfaedf9ec546'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]

条件に一致するドキュメント自体が置き換えられている

deleteOne

条件に合ったドキュメントのうち最初の1件を削除する

deleteOne構文
# 構文
db.<db名>.deleteOne(
# 削除条件
{ <field1>: <value1>, ...}
)
# 実行文サンプル
db.users.deleteOne(
{ age: 50 }
)

実行してみる

deleteOne
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54b'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54c'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54d'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54e'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 実行
SAMPLDB> db.users.deleteOne( { age: 50 })
{ acknowledged: true, deletedCount: 1 }
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54b'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54d'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661dcd0ddb6cfaedf9ec54e'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]

条件に一致するドキュメントの最初の1件が削除される

deleteMany

条件に合ったドキュメントを複数削除する

deleteMany構文
# 構文
db.<db名>.deleteMany(
# 削除条件
{ <field1>: <value1>, ...}
)
# 実行文サンプル
db.users.deleteMany(
{ age: 50 }
)

実行してみる

deleteMany
// 実行前
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec54f'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec550'),
user_id: '2',
name: 'shimada',
age: 50
},
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec551'),
user_id: '3',
name: 'tuji',
age: 50
},
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec552'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]
// 実行
SAMPLDB> db.users.deleteMany( { age: 50 })
{ acknowledged: true, deletedCount: 2 }
// 実行後
SAMPLDB> db.users.find()
[
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec54f'),
user_id: '1',
name: 'mori',
age: 20
},
{
_id: ObjectId('6661ddc1ddb6cfaedf9ec552'),
user_id: '4',
name: 'ayatuji',
age: 99
}
]

条件に一致するドキュメントがすべて削除されている

まとめ

mongoshで操作してみることで、MongoDBがどんなデータを
持つのかイメージすることができた。
データの作成や更新は従来のRDBに比べると行いやすいく、データ自体も
かなり柔軟性が高いと感じた。

pythonからどのように使うのかについて調べたい。

参考

関連記事

新着記事

タグ別一覧
top