MongoDBコマンド

 

前提
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()


トランザクション内部でもコミットするまで参照できない