前提
OS : Rocky Linux 9.1
MongoDB version : 6.0.3
mongosh
データベース作成
use db01
データベース一覧
show dbs
データベース削除
db.dropDatabase()
コレクション作成
db.createCollection('tab1')
コレクション一覧
show collections
コレクション削除
db.tab1.drop()
データ追加
db.tab1.insertOne(
{ _id: 0, col1: "val10", col2 : 20, col3 : ["val310","val320"], col4: { col41: 410, col42: "val420" } }
)
db.tab1.insertMany([
{ _id: 1, col1: "val11", col2 : 21, col3 : ["val311","val321"], col4: { col41: 411, col42: "val421" } },
{ _id: 2, col1: "val12", col2 : 22, col3 : ["val312","val322"], col4: { col41: 412, col42: "val422" } },
])
件数取得
db.tab1.countDocuments()
データ取得
db.tab1.find()
db.tab1.findOne()
射影
db.tab1.find({}, {col1: 1, col2: 1} )
db.tab1.find({}, {col3: 1} )
選択
db.tab1.find({ col1: "val10" })
射影+選択
db.tab1.find({ col1: "val10" }, {col1: 1})
ソート
db.tab1.find().sort({col2: 1})
db.tab1.find().sort({col2: -1})
データ削除
db.tab1.deleteOne({ col1: "val10" })
db.tab1.deleteMany({})
インデックス作成
db.tab1.createIndex({col1: 1})
インデックス一覧
db.tab1.getIndexes()
インデックス削除
db.tab1.dropIndex('col1_1')
状態確認
db.stats()
db.tab1.stats()
mongostat
mongotop
実行計画取得
db.tab1.find({ col1: "val10" }).explain()
インポート
cat << 'EOF' > a.csv
_id,col1,col2,col3
100,AAA,あ,10
200,BBB,い,20
300,CCC,う,30
400,DDD,え,40
EOF
cat a.csv
mongoimport \
--type=csv \
--file=a.csv \
--headerline \
--collection=tab2 \
mongodb://127.0.0.1:27017/db01
mongosh --quiet --eval 'db.tab2.find()' mongodb://127.0.0.1:27017/db01
エクスポート
mongoexport \
--type=csv \
--collection=tab2 \
--fields='_id,col1,col2,col3' \
mongodb://127.0.0.1:27017/db01 > b.csv
cat b.csv
バックアップ
mongodump \
--db=db01 \
--out=dump \
mongodb://127.0.0.1:27017
ls -lR dump
リストア
show dbs
use db01
db.dropDatabase();
show dbs
mongorestore \
--db=db01 \
mongodb://127.0.0.1:27017 \
dump/db01
スロークエリログ
db.getProfilingStatus()
db.setProfilingLevel(1, { slowms: 0 })
db.setProfilingLevel(0)
tail -f /var/log/mongodb/mongod.log
※レプリーション環境必要
スタンドアローンの場合、トランザクション内でデータ追加時下記エラー発生
MongoServerError: Transaction numbers are only allowed on a replica set member or mongos
show dbs
db.getSiblingDB("db01").tab1.insertOne( { col1: "val11"} )
db.getSiblingDB("db01").tab2.insertOne( { col1: "val21"} )
show dbs
db.getSiblingDB("db01").tab1.find()
db.getSiblingDB("db01").tab2.find()
session = db.getMongo().startSession()
session.startTransaction()
session.getDatabase("db01").tab1.insertOne( { col1: "val12"} )
session.getDatabase("db01").tab2.insertOne( { col1: "val22"} )
session.commitTransaction()
db.getSiblingDB("db01").tab1.find()
db.getSiblingDB("db01").tab2.find()
session.startTransaction()
session.getDatabase("db01").tab1.insertOne( { col1: "val13"} )
session.getDatabase("db01").tab2.insertOne( { col1: "val23"} )
session.abortTransaction()
db.getSiblingDB("db01").tab1.find()
db.getSiblingDB("db01").tab2.find()
※トランザクション内部でもコミットするまで参照できない