読者です 読者をやめる 読者になる 読者になる

MongoDB覚書

python 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

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}}
])