Mongodb

Mongodb

本地客户端Robo 3T

installation
  1. create file
    Centos:
    vim /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
  1. install
    sudo yum install -y mongodb-org
    或者指定版本
sudo yum install -y mongodb-org-4.0.0 mongodb-org-server-4.0.0 mongodb-org-shell-4.0.0 mongodb-org-mongos-4.0.0 mongodb-org-tools-4.0.0
配置

vim /etc/mongod.conf

  1. 数据库存储位置
    dbPath
    更新后记得修改文件权限(可以mongod --dbpath xxx来创建配置文件)
  2. 外部ip访问
    bindIp
  3. 登录验证
    先登录
mongo -u username -p "passwd" --authenticationDatabase admin
or
mongo 127.0.0.1:27017/admin -u username

创建密码:

use admin;
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
db.auth(username, password)验证是否创建成功

再修改配置

security:
  authorization: enabled(注意缩进)

新建db后增加用户

use yourdatabase
db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })

shell登录
mongo 127.0.0.1:27017/admin -u username


Pymongo

  1. Connect
    1.1 no password
import pymongo
client = pymongo.MongoClient("ip", port)
db = client.dbname
col = db.collection_name

1.2 password

import pymongo
client_url = "mongodb://username:password@ip:port/db"
client = pymongo.MongoClient(cli_url)
db = client.dbname
col = db.collection_name
  1. Select
1. all
col.find()
2. part
col.find({"xx":xx})
col.find_one({"xx": xx})
3. regex
col.find({"passed": 1, 'raw_summary_url': {"$regex": 'http://esf\..*'}})
4. exists
col.find({'raw_url': {'$exists': False}})
5. or
items = col.find({"pid": 127201, "$or": [{"name": "sku_lock"}, {"name": "sku_unlock"}]})
6. time filter
db.getCollection('logs').find({"updated": {"$gte": "2018-09-09 12:00:00", "$lt": "2018-09-10 12:00:00"}}).count()
7. aggregate
  7.1 group
db.getCollection('logs').aggregate(
[
{$match: {updated: {$gte: "2018-09-09 12:00:00", $lt: "2018-09-10 12:00:00"}}},
{$group: {_id:'$user', co: {$sum: 1}}},
{$sort: {co: -1}}
])
  7.2 字段显示
db.getCollection('logs').aggregate([
{ $project : {
    user : 1 ,
    name : 1 ,
}}
]);

  1. Count
col.find().count()
  1. Insert
item = {
    "url": url,
    "html": html
}
items = [item1, item2, item3...]

col.insert_one(item)
col.insert_many(items)
  1. Update
item = {
    "new_url": url,
    "new_html": html
}
如果Mongo没有则忽视
col.update_one({"a": a}, {"$set": item}})
如果Mongo没有则插入
col.update_one({"a": a}, {"$set": item}}, upsert=True)
  1. CreateIndex
创建索引
col.create_index("url", unique=True)
  1. Delete
col.remove({"city": "xxx"})

dump&restore

一开始搞了个服务器装上mongo用来存负责系统的行为日志, 随着公司的发展速度硬盘离装满越来越近了, 行为日志变得越来越重要, 对容灾性, 查询性能都开始有了要求, 于是在tencent买了mongo服务, 需要迁移一波数据.
其实也没多大, 7,8个g, 写个脚本循环一遍也是ok的, 但是总觉得那么做有点傻.
于是就开始折腾备份.

  1. 先用现成的
    其实腾讯云有mongo迁移服务的, 但是迁移起来并没成功, 提了个工单, 人家表示你的是4.0, 我们的是3.2, 不向下兼容
  2. emmmm, 那就只能自己试了
    网上搜一搜, dump命令:
    mongodump -h host --port port -u user -p password -d db -o /home/manbug/testmongo(file path) --authenticationDatabase admin
    然后不出所料开始了报错的历程
    报错报的浅显易懂, 就是说你验证没成功啥的. 搜起来也没搜到啥, 大多都是提示--authenticationDatabase admin这个一定要带上哦, 如果你导出的数据库有密码的话.
    终于在我反复换了几次admin账户, 数据库账户并一位一位确认密码没错之后, 我决定把这句删了, 然后...离成功近了一步
    所以最后其实是mongodump -h host --port port -u user -p password -d db -o /home/manbug/testmongo(file path), 当然此时还是报了个错, 说什么snap不识别.
    最后发现这个原因是因为我本地是3.6, 服务器是4.0, 所以无法dump, 去服务器上dump然后本地scp拷贝下来, 又试了下restore
    mongorestore -h 127.0.0.1:27017 -d han_dev --dir testmongo/han-dev (--authenticationDatabase admin 3.2需要这句)
    成功, 看来3.6存4.0的还是可以存, 只是dump时需要在原4.0版本里执行.
  3. tips
    ps: tencent还有个坑, dbname不能有中划线 han-dev ==> han_dev
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335