今回は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-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
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()
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.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で定義)
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"}])
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”})
db.user.save({_id:”1111″, name:”new”})
※_idが存在したら、更新を行う。
mongodbデータ検索
全件取得
db.collection名.find()
条件指定
db.collection名.find(条件)
db.user.find({_id:”1111″})
db.user.find({_id:”1111″})
1件のみ取得
db.collection名.findOne()
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” }
>
{ “_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}}) #カスタマイズ定義
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().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名.count()
db.collection名.count({name:”test”})
重複除外
db.collection名.distinct(“name”) #条件なし
db.collection名.distinct(“name”,{age:18}) #条件あり
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} #存在しない場合、登録
※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降順
5.0以降は
db.collection名.createIndex({カラム:1}) # 1昇順,-1降順
複数キーインデクス
db.collection名.ensureIndex({カラム:1,カラム:1}) # 1昇順,-1降順
5.0以降は
db.collection名.createIndex({カラム: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(‘インデクス名’)