MongoDB覚書
MongDB
MongoDBをcliから操作時のメモです。Mngoのインストール等を試した環境はCentOS7.2になります。
CentOS7環境でのインストール
◯リポジトリ追加 公式ページを確認しyumのリポジトリを追加する(https://www.mongodb.com/download-center#community)
/# vi /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
MongoDB起動
# systemctl start mongod
mongo接続
# mongo
mongo接続終了
exit
外部アクセスを許可する(IP指定なし)
/# vi /etc/mongod.conf
net: port: 27017 #bindIp: 127.0.0.1,192.168.1.15
bindIpを未指定または"bind_ip: 0.0.0.0"にすることで接続元のIPアドレスを制限しないようにできます。
外部アクセスを許可する(IP指定あり)
/# vi /etc/mongod.conf
net: port: 27017 bindIp: 127.0.0.1,192.168.1.15
bindIpを指定することでアクセス元のIPアドレスを制限できます。
bsonのリストア
# mongorestore –host localhost –db DB名 bsonファイル
DB一覧表示
show dbs
DBの選択
use DB名
DBの作成
use DB名
コレクションの作成
db.createCollection(“test_collection”)
DBの削除
use DB名 db.dropDatabase()
コレクション一覧確認
show collections
挿入
db.コレクション名.insert({ フィールド名:値,,,, }) サンプル db.book_collection.insert({ category: 'fantasy', title: 'タイトル1', synopsis: 'あらすじ1', publish: '田中出版', authors: ['田中太郎', '佐藤賢作'], created: ISODate("2016-11-29"), })
検索
◯テストデータ db.book_collection.insert({ category: 'fantasy', title: 'タイトル1', synopsis: 'あらすじ1', publish: '田中出版', authors: ['田中太郎', '佐藤賢作'], created: ISODate("2016-11-29"), }) db.book_collection.insert({ category: 'horror', title: 'ホラー1', synopsis: ' ホラー1', publish: '竹中出版', authors: ['田中太郎', '伊藤優一'], created: ISODate("2016-08-21"), }) db.book_collection.insert({ category: 'fantasy', title: 'ファンタジー2', synopsis: ' ファンタジー2', publish: '田中出版', authors: ['加藤信之'], created: ISODate("2016-07-15"), }) db.book_collection.insert({ category: 'SF', title: 'SF1', synopsis: ' SF1', publish: 'はなまる文庫', authors: ['田中賢介'], created: ISODate("2016-09-15"), }) db.book_collection.insert({ category: 'SF', title: 'SF2', synopsis: ' SF2', publish: 'はなまる文庫', authors: ['田中賢介'], created: ISODate("2016-09-16"), })
○一度に取得する件数変更(デフォルトでは20件ずつのデータ取得になっていたはず) DBQuery.shellBatchSize = 200 ○条件なし db.コレクション名.find() ◯条件付き x > 1 db.コレクション名.find({x: {$gt: 1}}) ○条件付き created > "2011-11-01" db.コレクション名.find({created: {$gt: ISODate("2011-11-01T00:00:00+09:00")}}) ◯複数条件 created > "2011-11-01" と category = 'fantasy' db.コレクション名.find({ created: {$gt: ISODate("2011-11-01T00:00:00+09:00")}, category: 'fantasy' } ) ・sample db.book_collection.find({ created: {$gt: ISODate("2011-11-01T00:00:00+09:00")}, category: 'fantasy' } ) ◯条件 authorsに田中太郎が含まれる db.コレクション名.find({authors: {"$in":['田中太郎']}}) ◯条件 作者の名前が田中で前方一致する db.コレクション名.find({authors: {"$in":[/^田中/]}}) */をつける時はシングルクォーテーションを外さないと見つからなかった ◯表示するフィールドを指定する titleのみ表示 db.コレクション名.find({}, {'title': 1}) ◯条件指定を変数に格納する created > "2016-08-01" condition={created: {$gt: ISODate("2016-08-01T00:00:00+09:00")}} db.コレクション名.find(condition) ◯表示条件を変数に格納する titleのみ表示 view={title:1} db.コレクション名.find({}, view)
ソート
◯createdで昇順にソート db.コレクション名.find().sort({created:1})
集約
◯publishで集約した件数を表示 db.コレクション名.aggregate([ { $group : {_id: "$publish", count:{ $sum: 1 } }} ]) ◯createdの年、月、日で集約した件数を表示 db.コレクション名.aggregate([ { $group : {_id: {month: { $month: "$created" }, day: { $dayOfMonth: "$created" }, year: { $year: "$created" }}, count:{ $sum: 1 } }} ]) ◯publichとcreatedの年で集約した件数を表示 db.コレクション名.aggregate([ { $group : {_id: {publish: "$publish", year: { $year: "$created" }}, count:{ $sum: 1 } }} ]) ◯createdの年、月、日で集約してソートした件数を表示 db.コレクション名.aggregate([ { $group : {_id:{year: { $year: "$created" }, month: { $month: "$created" } },count:{ $sum: 1 } }}, { $sort: {"_id.month":1}} ]) ◯createdの年、月、日で集約し件数上位3件を表示 db.コレクション名.aggregate([ { $group : {_id:{year: { $year: "$created" }, month: { $month: "$created" } },count:{ $sum: 1 } }}, { $sort: {"count":-1}}, { $limit: 3 } ]) ◯authorに田中太郎が含まれるものをpublichで集約して表示 db.コレクション名.aggregate([ { $match: {authors: {"$in":['田中太郎']}}}, { $group : {_id: "$publish", count:{ $sum: 1 } }}, { $sort: {"count":-1}} ])