たつをの ChangeLog : 2020-10-24

今更ながら、MongoDB を macOS と CentOS7 で試してみた。ざっくりとだけど一通り流れは理解できた。


目的の一つは、ある商品群の価格変化を記録していくこと。Keepa みたいなイメージ。私がよくやっている「TSVファイルに追加していく単純な方式」と比べ、速度や使い勝手がどうなのかは、サーバで運用しながら調べていく予定。

macOS へのインストール

環境: MacBook Pro (13-inch, 2017), macOS 10.15.7。

これらを参考に。

brew install mongodb
今はできない。代わりの方法。
brew tap mongodb/brew
brew install mongodb-community

cat /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

起動:
brew services start mongodb-community

CentOS7 へのインストール

環境: さくらVPS, CentOS 7。
MongoDB の current version は 4.4。

ここの手順に従う。

まず、"/etc/yum.repos.d/mongodb-org-4.4.repo" を作り、それから yum を実行。
sudo yum install -y mongodb-org

起動:
sudo systemctl start mongod

動作の確認

mongo
use test
show dbs
db.stats()
# db.createCollection('hello')
show collections
db.hello.stats()
db.hello.insert({'uid':123, 'test':'World'})
db.hello.insert({'uid':"oreore", 'text':'This is a pen.'})
db.hello.insert({'uid':"you", 'text':'Today is ...'})
db.hello.find()
db.hello.findOne()
db.hello.findOne()["uid"]
var r = db.hello.find()
while (r.hasNext()) printjson(r.next())
quit()

バックアップ&リストア

mongodump -d test
mongo
use test
db.hello.drop()
db.dropDatabase()
show dbs
quit()
mongorestore ./dump

監視

mongotop
mongostat

取り出し

db.hello.find({}, {uid: 1, text: 1, _id: 0})
db.hello.find({$or: [{'uid':123}, {'uid':"you"}]}, {uid: 1, text: 1, _id: 0})
db.hello.find({$or: [{'uid':123}, {'uid':"you"}, {'uid':"oreore"}]}, {ud: 1, text: 1, _id: 0})
db.hello.find({$or: [{'uid':123}, {'uid':"you"}, {'uid':"NO"}]}, {uid: 1, text: 1, _id: 0})

更新

db.hello.update({"uid" : "you"}, {$set : {"text":"こんにちは"}})
db.hello.insert({'uid':"me", 'hist':[{'ymd':20201020,'val':12}]})
db.hello.update({'uid':"me"}, {$push:{'hist':{'ymd':20201024,'val':38}}})
db.hello.update({'uid':"me"}, {$set:{'last-update':ISODate("2020-10-24T12:55:15")}})

Python

インストール:
pip install pymongo
テストスクリプト:
from pymongo import MongoClient
import datetime

dt_now = datetime.datetime.now()

client = MongoClient('localhost',27017)
db = client.test
col = db.hello

for i in col.find():
    print(i)

col.update_one({'uid':"me"}, {
    '$push':{'hist':{'ymd':dt_now,'val':189}},
    '$set':{'last-update':dt_now}
})

print(col.find_one({'uid':"me"}))

参考


たつをの ChangeLog
Powered by chalow