数据库-mongoDB安装使用

windows 下安装

下载安装程序,选择自定义安装, 去掉 compass 选项,否则会卡住很久. 这是个 gui 访问界面,收费的.

mongod –dbpath D:\backup\mongoDb\stock

centos 下安装

install version: mongodb-org.x86_64 0:4.0.9-1.el7

  1. Configure the package management system (yum).
    Create a /etc/yum.repos.d/mongodb-org-4.0.repo file so that you can install MongoDB directly using yum:
[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 the MongoDB packages.
    sudo yum install -y mongodb-org

  2. Run MongoDB

  • To Use Default Directories
/var/lib/mongo (the data directory)
/var/log/mongodb (the log directory)

By default, MongoDB runs using the mongod user account.
用户和用户组都是 mongod

  • To Use Non-Default Directories
    太复杂,要改一些东西。用默认的就可以了

sudo service mongod start

随系统启动
sudo chkconfig mongod on

sudo service mongod stop
sudo service mongod restart

查看日志
sudo tail /var/log/mongodb/mongod.log

命令行

mongo

mac 下的安装

brew update
brew install mongodb
// 作为后台服务随系统自动启动
brew services start mongodb
// 不作为后台服务
mongod --config /usr/local/etc/mongod.conf
// 运行
mongod --dbpath ~zhengjun/project/mongodb/stock
// 下面输出表示启动ok
[initandlisten] waiting for connections on port 27017

配置

配置文件

配置文件位置
/etc/mongod.conf

修改
将 net:bindIp: 127.0.0.1 改为 0.0.0.0

打开认证
第一种方法:
mongod –auth –port 27017

第二种方法:使用配置文件:
security:
authorization: enabled //冒号后面需要空一格

开放 27017 端口

  1. SElinux

semanage port -a -t mongod_port_t -p tcp 27017

  1. 防火墙

firewall-cmd –zone=public –add-port=27017/tcp –permanent
firewall-cmd –reload

查看用户

#查看当前库下的用户
show users;

新建用户

先创建管理员,用来创建其他用户。 用户所属范围是数据库。
所以要先建数据库然后在数据库里面建用户。否则无法在使用的数据库里面认证用户

db.createUser(
{
user: “stock”,
pwd: “stock”,
roles: [ { role: “readWrite”, db: “stock” } ]
}
)

db.createUser({
user:"admin",
pwd:"admin",
roles:[{
role:"root",
db:"mongoTest"
}]
});

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
root:只在 admin 数据库中可用。超级账号,超级权限

删除用户

先要认证管理员,在切换数据库,在删除用户

use testDB
db.dropUser('test')

卸载

1.关闭mongod
sudo service mongod stop
2.删除安装包
sudo yum erase $(rpm -qa | grep mongodb-org)
3.删除数据文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo

问题

  1. 启动 MongoDB 提示报警信息:“WARNING: Access control is not enabled for the database.”
    新版本的 MongDB 增加了安全性设计,推荐用户创建使用数据库时进行验证。如果用户想建立简单连接,则会提示警示信息。
    创建管理员并设置密码
>use admin
>db.createUser(
{
user: "admin", //用户名
pwd: "admin", //密码
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] //设置权限
}
)

使用

// mongo shell
mongo --host 127.0.0.1:27017
// stop mongoDb
Control+C

重启数据库服务器

mongod --auth --port 27017 --dbpath D:\MongoDB\Data\db

查询操作

查看版本

mongod -version

db version v3.6.5

查询数据库

show dbs

停止

//查看进程并kill
ps aux|grep mongod
kill -9 pid

//在客户端中使用shutdown命令
use admin
db.shutdownServer()

创建数据库

use stock
from pymongo import MongoClient
Client = MongoClient()

db = Client['test_database']

创建集合,相当于表

# 返回、创建集合
collection = db['test_collection']

创建索引

db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。

db.col.createIndex({"title":1})
db.col.createIndex({"title":1,"description":-1})

降序,唯一索引
db.collection.createIndex({a:-1},{unique:true})

options:
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.

db.values.createIndex({open: 1, close: 1}, {background: true})

查看索引

查看集合索引
db.col.getIndexes()

查看集合索引大小
db.col.totalIndexSize()

删除集合所有索引
db.col.dropIndexes()

删除集合指定索引
db.col.dropIndex("索引名称")

插入

collection.insert({'code': code, 'startDate': start_date, 'endDate': end_date, 'klines': dates})

获取所有集合

list_collection_names()

更新数据

其中传入的第一个参数是你想要更新的数据,第二个是你想要更新的最新数据。其中$set部分是必要元素,如果没有会报出错误。除了$set 外还有很多其它的比如$inc,对应着不同的功能,在此先不赘述。

上面只是更新匹配到的第一个数据,同样地,也可以用 update_many()一次更新多个值。

>>>posts.update_one({'x':4},{'$set':{'x':3}})

查询

for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
print(x)

ret = stockCodes.find({"ts_code": {"$regex": ".{}".format(market)}},
{"_id": 0, "ts_code": 1, "symbol": 1, "name": 1,"list_date":1})

最后 N 条记录

results = collection.find().sort('trade_date', pymongo.DESCENDING).limit(1)
if results:
# exist
startDateStr = results[0]['trade_date']