mongoシェル


前提


mongoシェルでMongoDBサーバへアクセス

mongoシェルはJavaScriptシェル


データベースの構造

mongoシェル起動時、利用するデータベース名を指定する。


REPLでmongoシェル起動: mongoコマンド

mongo データベース名

Dockerコンテナでmongoシェル起動

ホストと同一ネットワークの場合

db=test # データベース名
docker run --rm -it --network host --name mongo-client \
  mongo:4.2  mongo $db

サーバもクライアントも同じ専用のネットワークの場合

net=mongo-net # ネットワーク名
server=mongo-server # サーバコンテナ名
docker run --rm -it --network $net --name mongo-client \
  mongo:4.2  mongo --host $server $db

認証あり

user=myadmin
docker run --rm -it --network host --name mongo-client \
  mongo:4.2  mongo -u $user $db

MongoDB shell version v4.2.0
Enter password:

スクリプトファイルを実行

mongo データベース名 ファイル.js

REPLの専用コマンド

> use test1
switched to db test1

print()関数で画面出力


dbオブジェクト: 現在のデータベース

データベースの指定(変更)

// dbに代入する
db = new Mongo().getDB('データベース名')

コレクション操作

各コレクションの操作は、db.コレクション名.メソッド()のようにする。


CRUD操作

// 挿入
// コレクションが非存在なら作成して挿入
db.mybook.insert({フィールド: '値'})

// JavaScriptシェルなので、こういうこともできる
let c = db.mybook
// 削除
c.drop()

挿入: insertメソッド

// 一つ挿入
db.mybook.insert({タイトル: '人間失敗'})

let books = [
  {
    タイトル: '吾輩はネコ?',
    評価: 85,
    キーワード: [ '猫', '明治'],
  },
  {
    タイトル: 'ワレワレは宇宙人?',
    評価: 60,
  },
]
// 複数挿入
db.mybook.insert(books)

検索: findメソッド

let クエリ = {タイトル: '人間失敗'}
// 絞り込み検索
db.mybook.find(クエリ)
// 全部
db.mybook.find()

検索結果の調整

sort(): ソート

db.mybook.find().sort({ 評価: -1 })

limit(): 件数上限

// 2件
db.mybook.find().sort({ 評価: -1 }).limit(2)

count(): 件数カウント

db.mybook.count(クエリ)
// 同じ
db.mybook.find(クエリ).count()

ドキュメント更新

db.mybook.insert({タイトル:'歩けメロス', 評価: null}) // 挿入

let filter, update
filter = { タイトル: '歩けメロス' }
update = { $set: { 評価: 91, 難易度: 'B' } }
db.mybook.updateOne(filter, update)

// フィールド削除
update = { $unset: { 評価: '' } }
db.mybook.updateOne(filter, update)