mongodbの使い方

mongodb

今回はmongodbの使い方を紹介します。

mongodbのインストール

例としてはamazonlinux2にmongodbをインストールします。
公式サイト「Install MongoDB Community Edition on Amazon Linux — MongoDB Manual」の手順を参照しながら、実施します。主に以下の手順となります。

sudo vi /etc/yum.repos.d/mongodb-org-5.0.repo

[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

sudo yum install -y mongodb-org

mongodb起動

sudo systemctl start mongod
ps -ef | grep mongod
結果: /usr/bin/mongod -f /etc/mongod.conf

mongodb停止

sudo systemctl stop mongod

クライアントでログイン

$ mongo

クライアントでログアウト

exitまたはctrl + c

データベースの表示

①利用中のデータベース確認
db
//test

②すべてデータベース確認
show dbs / show databases

③データベースの作成
use db_name
※データを作成しないと、メモリ上に存在する

④データベースの削除(利用中のデータベースを削除)
db.dropDatabase()

Collection

collection作成

自動作成

use python #pythonデータベース作成
db.user.insert({“name”:”test”}) # collection作成
show collections #結果:user

手動で作成

db.createCollection(name,options)
db.createCollection(“student”)
db.createCollection(“sub”,{capped:true,size:100})
# capped: デフォルト値false(上限なし),true:上限あり
# size : byte数(上限値) (256以下の場合、256で定義)

Collection表示

show collections

Collection削除

db.collection名.drop()

上限設置値有無チェック

db.collection名.isCapped()

指定Collectionデータの検索

db.collection名.find()

mongodbデータ型

Object ID データのID
String 文字列,UTF-8
Boolean true,false
Integer 整数
Double  
Arrays 配列
Object  
Null null
Timestamp 秒数
Date  

mongodbデータ登録

insert

1件
db.collection名.insert(document)
db.user.insert({“_id”:”1111″,name:”test”})

複数
db.user.insert([{"_id”:”1111",name:”test”},{"_id”:”2222",name:”test2"}])

save

db.collection名.save(document)

db.user.save({_id:”1111″, name:”new”})

※_idが存在したら、更新を行う。

mongodbデータ検索

全件取得

db.collection名.find()

条件指定

db.collection名.find(条件)
db.user.find({_id:”1111″})

1件のみ取得

db.collection名.findOne()
db.collection名.findOne(条件)
> db.user.find({name:”new”})
{ “_id” : “1111”, “name” : “new” }
{ “_id” : “3333”, “name” : “new” }
> db.user.findOne({name:”new”})
{ “_id” : “1111”, “name” : “new” }
>

検索結果のフォーマット(findOne同時に使えない)

db.user.find({name:”new”}).pretty()

mongodbデータ検索条件

演算子 意味
$lt より小さい
$lte 以下
$gt より大きい
$gte 以上
$ne 等しくない
$exists 存在有無
$or OR条件
db.user.find({age:{$gt:18}})
db.user.find({age:18,gender:false})
db.user.find({$and:[{age:18},[{age:18},{gender:false}]d
db.user.find({$or:[{age:18},[{age:18},{gender:false}]

db.user.find({hometown:{$in:["tokyo["tokyo”,”saitama”]n
db.user.find({hometown:{$nin:[["tokyo”["tokyo”,”saitama”]

db.user.find({name:{regex:”^R”}})  #正規表現
db.user.find({$where:function() {return this.age>30}})   #カスタマイズ定義

skipとlimit

db.user.find().limit(1)
db.user.find().skip(1)

db.user.find().skip(2).limit(3)   #page表示

指定のカラムのみ取得

db.user.find({},{name:1,age:0) #0取得しない、1取得

ソート

db.collection名.find().sort({カラム名:1,カラム名2:-1})

件数取得

db.collection名.find().count()
db.collection名.count()
db.collection名.count({name:”test”})

重複除外

db.collection名.distinct(“name”) #条件なし
db.collection名.distinct(“name”,{age:18}) #条件あり

mongodbデータの更新

db.collection名.update({query},{update},{multi:boolean})  #デフォルト1件のみ更新
※updateは更新後のカラムです。指定していないカラムは削除されます

db.collection名.update({query},{$set:{update}},{multi:boolean}) #multi:trueを設定できます。

db.collection名.update({},{$set:{“address”:”test”}},{multi:true} #全件カラム追加

db.collection名.update({},{$set:{“address”:”test”}},{upsert:true} #存在しない場合、登録

mongodbデータの削除

db.collection名.remove({query},{justOne:true}) #デフォルトは複数削除、justOneがtrueの場合、1件のみ削除

pipelineの使い方

$group 表示結果のキーの設定と集計方法の設定
$match フィルター
$project rename集計結果の表示
$sort ソート
$limit レコード数を制限
$skip 指定の個数を除外
$count 残っているレコード数
$sum  
$avg  
$min  
$max  
$push  

group

db.user.aggregate({$group:{_id:”$name”,cnt:{$sum:1},sum_age:{$sum:”$age”}}})

match

db.user.aggregate({$match:{age:18},{$group:{_id:”$gender”,name:{$push:”$name”}}})

mongodbインデクス

インデクス作成

単一キーインデクス

db.collection名.ensureIndex({カラム:1}) # 1昇順,-1降順
5.0以降は
db.collection名.createIndex({カラム:1}) # 1昇順,-1降順

複数キーインデクス

db.collection名.ensureIndex({カラム:1,カラム:1}) # 1昇順,-1降順
5.0以降は
db.collection名.createIndex({カラム:1,カラム:1}) # 1昇順,-1降順

uniqueインデクス

db.collection名.ensureIndex({カラム:1},{“unique”:true})

大量データ作成

for(i=0;i<100000;i++) {db.t1.insert({name:’test’+i,age:i})}

実行計画取得

db.t1.find({name:’test10000′}).explain(‘executionStats’)

インデクスの取得

db.collection名.getIndexes()

インデクスの削除

db.collection名.dropIndex({カラム名:1})
または
db.collection名.dropIndex(‘インデクス名’)
タイトルとURLをコピーしました