| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「MongoDB」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
318行目: 318行目:
 
|  
 
|  
 
|-
 
|-
|  
+
| ソート
|  
+
| db.collection.find().sort({...})
|  
+
// 1:昇順,-1:降順
 +
| db.testCollection.find().sort(
 +
{key:-1}
 +
)
 
|-
 
|-
 
|  
 
|  

2021年5月17日 (月) 06:27時点における版

MongoDB

マニュアル

ドキュメント指向データベース


スキーマレス


  • スキーマを定義しなくても利用できる
  • スキーマレスのため保守性が高い
  • JSON方式でデータを保持
  • テーブルのことはコレクションと呼ぶ

パフォーマンス


  • 機能制限により、高パフォーマンスを実現
  • トランザクションがない
    • 処理速度がかなり高速
  • 大量データの高速処理に向く
  • スケールアウトが簡単な設定で可能

操作感


  • RDBと似た操作
  • 複雑な検索条件を利用できる

インストール


Ubuntu


ubuntu@puli-mon:~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
   :
ubuntu@puli-mon:~$ wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
OK
ubuntu@puli-mon:~$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
ubuntu@puli-mon:~$ sudo apt-get update
ubuntu@puli-mon:~$ sudo apt-get install -y mongodb-org
ディレクトリ

種類 場所 備考
データ /var/lib/mongodb
ログ /var/log/mongodb
設定 /etc/mongod.conf
開始

ubuntu@puli-mon:/etc$ sudo systemctl start mongod
  • 失敗する場合
sudo systemctl daemon-reload
リモートホストから接続

  • デフォルトでは、localhostからのみ接続可能なため、bindIp の行を変更
  • $ sudo vi /etc/mongod.conf
# network interfaces
net:
  port: 27017
#  bindIp: 127.0.0.1
  bindIp: 0.0.0.0

monogoシェルの実行


ubuntu@puli-mon:/etc$ mongo
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?
          :
---
> 

GUI

MongaDB Compass


Robo 3T


Mongodb gui t3 download.png

  • 起動

Mongodb gui t3.png

データベース

データベース作成


  • use で作成
> use testdb
switched to db testdb
  • db。dろpDatabase() でカレントDBを削除

コレクションを作成


> db.createCollection("testDoc")
{ "ok" : 1 }
  • 一覧を確認
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
testdb  0.000GB

ドキュメントの登録


  • testDocは、コレクション
> db.testDoc.insertOne(
... {name:"Foo",value:"Bar"}
... )
{
	"acknowledged" : true,
	"insertedId" : ObjectId("609f57392efac2b731a534eb")
}

検索


  • find
> db.testDoc.find()
{ "_id" : ObjectId("609f57392efac2b731a534eb"), "name" : "Foo", "value" : "Bar" }

DB統計


> db.stats()
{
	"db" : "testdb",
	"collections" : 1,                       // コレクション数
	"views" : 0,    
	"objects" : 1,
	"avgObjSize" : 51,
	"dataSize" : 51,                       // 圧縮前データサイズ
	"storageSize" : 20480,
	"indexes" : 1,                           // インデックス数
	"indexSize" : 20480,             // インデックスデータ量
	"totalSize" : 40960,
	"scaleFactor" : 1,
	"fsUsedSize" : 2561937408,
	"fsTotalSize" : 20629221376,
	"ok" : 1
}

コレクション

種類 コマンド
コレクションの作成 db.createCollection(コレクション名) db.createCollection("testCollection")
コレクションの一覧表示 show collections
統計情報表示 db.collection.stats()
コレクションの削除 db.collection.drop() db.testCollection.drop

Cappedコレクション


  • コレクションに入れられるデータの上限を設定
  • データ量が上限になると、古いドキュメントから削除されていく
  • レプリカセットでは、Cappedコレクションを使ってデータを同期している
  • createCollection のオプションを変更して作成
db.createCollection(
  "コレクション名",
  [capped: true, size:  データ上限(バイト)サイズ]
)

登録

方法 コマンド
1件登録 db.collection.insertOne({...}) db.testCollection.insertOne({key:"1",value:"a"})
複数登録 db.collection.insertMany([

{...}, {...} ])

db.testCollection.insertMany([

{key:2,value:"b"}, {key:3,value:"c"} ])

検索

方法 コマンド
全件 db.collection.find() db.testCollection.find()
フィールドを指定 db.collection.find(

{検索条件}, {key1:0,kye2:1,...} ) //key1を非表示、key2を表示

db.testCollection.find(

{key:2}, {_id:0,key:1,value:1} )

完全一致 {key:value}
部分一致 {key:/value/}
前方一致 {key:/^value/}
後方一致 {key:/value$/}
以下 {key:{$lte:value}}
未満 {key:{$lt:value}}
以上 {key:{$gte:value}}
より大きい {key:{$gt:value}}
範囲指定 {key:{$gte:value1, $lte:value2}}
and {$and:[

{key1:value1}, {key2:value2} ]}

or {$or:[

{key1:value1}, {key2:value2} ]}

null {key:null}

以下が検索される 1.データ型がNull 2.フィールドなし 3.undefined

フィールドの存在有無($exists) { key: {$exists: false}}
 データ型を指定($type) {key:{$type:"null"}}

// Null型を指定して検索

ソート db.collection.find().sort({...})

// 1:昇順,-1:降順

db.testCollection.find().sort(

{key:-1} )