MongoDB: mongoシェル


前提


ドキュメント


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

mongo

> 

mongoシェル起動: Dockerの場合

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

docker run --rm -it --network host \
  --name mongo-client mongo:4.2 \
  mongo

# サーバポートが違うなら
docker run --rm -it --network host \
  --name mongo-client mongo:4.2 \
  mongo --port 27018

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

# mongo-netというネットワークの、mongo-serverというコンテナ名に接続
docker run --rm -it --network mongo-net \
  --name mongo-client mongo:4.2 \
  mongo --host mongo-server

mongoシェルのはじめ

データベースの構造

まずデータベースを指定して、操作していく

> use test1
switched to db test1

mongoシェルはJavaScriptシェル

データベース操作


コレクション操作

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

// 名前の一覧(配列)
db.getCollectionNames()

// mybookという名前で作成
db.createCollection('mybook')

// mybook削除
db.mybook.drop()

ドキュメント操作

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

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

挿入: insertメソッド

db.mybook.insert({タイトル: '人間失敗'})

// ドキュメントのフィールドが固定ではないので、
// 任意のプロパティで挿入できる
let book;
book = {
  タイトル: '吾輩はネコ?',
  評価: 85,
  キーワード: [ '猫', '明治'],
}
db.mybook.insert(book)

検索: findメソッド

> db.mybook.find()
{ "_id" : ObjectId("5d7f037cd91653ba8eff8460"), "タイトル" : "人間失敗" }
{ "_id" : ObjectId("5d7f037dd91653ba8eff8461"), "タイトル" : "吾輩はネコ?", "評価" : 85, "キーワード" : [ "猫", "明治" ] }

ドキュメントの_id

_idで検索

let target;
target = { "_id" : ObjectId("5d7f037cd91653ba8eff8460") }
db.mybook.find(target)

フィールドに条件を付けて検索

$gt: より大きい

target = { 評価 : { $gt: 80 } }
db.mybook.find(target)

$in: 配列に含む

target = { キーワード : { $in: ['明治'] } }

複数の条件

let or1 = { タイトル : "人間失敗" }
let or2 = { キーワード : { $in: ['明治'] } }
target = { $or: [or1, or2] }

$exists: フィールドが存在するか(null値含む)

db.mybook.insert({タイトル:'お坊っちゃん', 評価: null}) // 挿入
target = { 評価: { $exists: true } }

$regex: 正規表現

target = { タイトル: { $regex: /失敗$/ } }
// 単にこれでも
target = { タイトル: /失敗$/ }

検索結果の調整

sort(): ソート

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

limit(): 件数上限

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

ドキュメント更新

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

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

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