MongoDB
下载地址:https://www.mongodb.com/try/download/community
WSL2下安装MongoDB 6.x
0.使用以下命令安装gnupg及其所需的库
apt-get install gnupg
1.导入包管理系统使用的公钥
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
2.为MongoDB创建一个列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
3.重新加载本地包数据库
apt-get update
4.安装MongoDB包
apt-get install -y mongodb-org
5.配置文件位置
/etc/mongod.conf
6.启动脚本
/root/startup.sh
#!/bin/bash
ulimit -SHn 65535
mongod -f /etc/mongod.conf -fork
优雅的关闭
mongod -f /etc/mongod.conf --shutdown
7.Windows启动脚本
c:/auto_run/startup/start.bat
wsl -d Ubuntu -u root /root/startup.sh
8.Windows启动调用
shell:startup /startup.vbs
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:\auto_run\startup\start.bat /start",0
安装手册:https://www.mongodb.com/docs/manual/administration/install-on-linux/
代码段
查看今日爬虫状态
/*
* 查看今日爬虫状态
* BY: http://malu.me/
*/
var date = new Date();
var bb = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate();
function getcount(){
var collection_list = db.getCollectionInfos({"name":/BR_/}); // 列出前包含BR_的Collection
for ( var i=0;i<collection_list.length;i++ ){
table = collection_list[i]['name'];
ok = db.getCollection(table).find({'product_info': {$ne:""},"date":bb,"source":"TB"}).count();
no = db.getCollection(table).find({'product_info': "","date":bb,"source":"TB"}).count();
print(table, ok+'/'+no);
}
}
getcount();
PHP模糊查询 old
<?php
// 连接到mongodb
$m = new MongoClient("xxx.malu.me:123456");
// 选择一个数据库
$db = $m->mydb;
// 认证登录
$db->authenticate('username', 'passwd');
// 选择一个表
$collection = $db->user;
$name = 'python';
$query = array('title' => new MongoRegex("/.*".$name.".*/i"));
$cursor = $collection->find($query);
// 迭代显示文档标题
// var_dump($cursor);
foreach ($cursor as $document) {
echo $document["title"] . "\n";
}
?>
PHP mongoDB常用查询
<?php
//字段字串为
$querys = array("name"=>"malu");
//数值等于多少
$querys = array("number"=>7);
//数值大于多少
$querys = array("number"=>array('$gt' => 5));
//数值大于等于多少
$querys = array("number"=>array('$gte' => 2));
//数值小于多少
$querys = array("number"=>array('$lt' => 5));
//数值小于等于多少
$querys = array("number"=>array('$lte' => 2));
//数值介于多少
$querys = array("number"=>array('$gt' => 1,'$lt' => 9));
//数值不等于某值
$querys = array("number"=>array('$ne' => 9));
//使用js下查询条件
$js ="function(){
return this.number == 2 && this.name == 'shian';
}";
$querys = array('$where'=>$js);
//字段等于哪些值
$querys = array("number"=>array('$in' => array(1,2,9)));
//字段不等于哪些值
$querys = array("number"=>array('$nin' => array(1,2,9)));
//使用正则查询
$querys = array("name"=> new MongoRegex("/.*".$name.".*/i"));
//或
$querys = array('$or' => array(array('number'=>2),array('number'=>9)));
?>
语句
建立复合索引
db.getCollection("bolg").createIndex({"source":1,"date":-1});
1 为指定按升序创建索引
-1 为降序来创建索引
创建唯一索引,并消除重复数据。
数字1表示userid键的索引按升序存储,-1表示userid键的索引按照降序方式存储。
> db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})
注:如果存在其他键,那么删除重复会失败,需要手动删除。
聚合查询,统计重复个数
> db.runCommand({"distinct":"table_name","key":"field_name"})
# 查看非重复值个数
> db.getCollection("table_name").distinct('field_name').length
# 找出指定字段重复数
> db.AI_online.aggregate([{$group : {_id : "$title", num : {$sum : 1}}},{$match :{num:{$gt : 1}}},{$sort:{num:-1}}])
# 删除指定字段重复值,只保留一个(去重)
> db.AI_online.aggregate([
{
$group: { _id: {title: '$title'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
]).forEach(function(doc){
doc.dups.shift();
db.AI_online.remove({_id: {$in: doc.dups}});
})
模糊查询
db.test_info.find({"tname": {$regex: '测试', $options:'i'}})
db.test_info.find({"tname": {$regex:/测试.*/i}})
模糊+或查询
db.test_info.find({"$or":[{"title":{$regex:/测试.*/i}},{"summary":{$regex:/测试.*/i}}]})
MongoDB运维
RPM安装
rpm -ivh https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-server-5.0.6-1.el7.x86_64.rpm --force --nodeps
ubuntu安装5.x
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
vim /etc/apt/sources.list.d/mongodb-org-5.0.list
apt update
apt-get install -y mongodb-org
服务启动与停止
systemctl start mongod
systemctl stop mongod
异常处理
日志报错:MongoDB之Too many open files
Linux是有文件句柄限制的,而且Linux默认一般都是1024
解决办法:把句柄限制提高
cat /proc/sys/fs/file-max # file-max(系统级别)是设置系统所有进程一共可以打开的最大文件数量。
cat /etc/security/limits.conf # 永久配置文件(注意WSL2下这个值貌似没生效)
ulimit -n # 查看用户级的限制,阿里云服务器一般是65535
ulimit -a # 查看当前的各种用户进程限制
ulimit -SHn 65535 # 临时修改系统句柄限制,加-H就是硬限制,加-S就是软限制
mongo3.x老版本升级
如果以前有3.x版本,则需要先卸载老版本
使用 apt list --installed | grep mongo
查看历史版本
然后删除他们:
apt remove mongodb-server-core
注意!!
mongod 版本3.x的配置文件和 5.x的有区别:
3.x默认使用 /etc/mongodb.conf
5.x默认使用 /etc/mongod.conf 的 yaml格式,注意格式区分!
开启密码登录:
1.添加用户
在终端下
use admin // 进入admin库
db.createUser({
user: 'admin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'root', // 角色
db: 'admin' // 数据库
}]
})
show users // 显示用户列表
2.配置文件开启验证 mongod.conf
security:
authorization: enabled
2.1 或者启动的时候加上 –auth
mongodump常用参数说明
- –db:指定导出的数据库
- –collection:指定导出的集合
- –excludeCollection:指定不导出的集合
- –host :远程ip
- –username:开启身份验证后,用户的登录名
- –password:用户的密码
- –out(指定输出目录):如果不使用这个参数,mongodump将输出文件保存在当前工作目录中名为dump的目录中
- –archive:导出归档文件,最后只会生成一个文件
- –gzip:压缩归档的数据库文件,文件的后缀名为.gz
mongodump和mongorestore来迁移数据库
官方说明书:https://docs.mongodb.com/database-tools/mongodump/
备份恢复本地全库:
mongodump -o /mongodbbackup/20220230/ --gzip
mongorestore --dir ./20220230/ --gzip
备份恢复单个collection
mongodump --uri="mongodb+srv://malu:xxxxx@malu.me" -d=spider_zujuan -c=questions --archive=spider_zujuan.gz --gzip
mongorestore --gzip --archive=spider_zujuan.gz -d=spider_zujuan -c=questions --uri="mongodb://192.168.50.2"
备份整个数据库脚本
#!/bin/bash
MY_PATH=$(cd "$(dirname "$0")"; pwd)
cd $MY_PATH
dd=`date '+%Y-%m-%d-%H%M%S'`
mongodump --uri="mongodb+srv://malu:xxxxx@malu.me" -o ./$dd --gzip
# mongorestore --dir ./20220230/ --gzip
迁移mongodb 3.4->3.6
可以采用直接拷贝数据库文件的方式进行。 拷贝文件需要停止数据库服务,停止后直接拷贝数据库文件目录中的数据即可。
注意事项:
1、.lock文件不要拷贝;
2、diagnostic.data的文件夹不要拷贝,如果拷贝,在新的数据库运行时会出现错误,需要修复,时间有点长。
快速安装
apt-get install mongodb
apt-get install mongodb-org
Linux下安装手册:https://docs.mongodb.com/manual/administration/install-on-linux/
启动
mongod -f /etc/mongodb.conf -fork //使用配置文件启动,并后台执行
连接
mongo --host xx.xx.xx.xx --port 123
test数据库添加用户
use test
db.addUser("test","test")
登录
// 方式一
mongo
use admin
db.auth('admin', '123456')
// 方式二
mongo admin -u admin -p 123456
添加超级管理员
db.createUser(
{ user: "admin",
pwd: "admin",
roles: [ { role: "root", db: "admin" } ]
}
)
user字段,为新用户的名字;
pwd字段,用户的密码;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。
内建的角色:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
- 内部角色:__system
角色参考:https://docs.mongodb.com/manual/reference/built-in-roles/#built-in-roles
修改超级管理员密码
db.changeUserPassword("admin", "654321")
添加DB读写用户
先建立一个DB,然后在该DB下执行shell:
db.createUser(
{ user: "spider",
pwd: "spider",
roles: [ { role: "readWrite", db: "spider" } ]
}
)
windows下开启mongodb用户认证
修改配置文件:C:\Program Files\MongoDB\Server\3.4\mongod.cfg
添加:
security:
authorization: enabled
然后重启服务
知识库
聚合
聚合参考文档 https://docs.mongodb.com/v5.0/reference/aggregation/
实用 MongoDB 聚合书 https://www.practical-mongodb-aggregations.com/
PHP
PHP Mongodb库手册
https://docs.mongodb.com/php-library/current/tutorial/
PHP Mongodb库官方文档
https://www.php.net/manual/zh/set.mongodb.php
Python
pymongo手册
https://pymongo.readthedocs.io/
https://www.w3schools.com/python/python_mongodb_insert.asp
CRUD
https://docs.mongodb.com/v5.0/crud/
windowns MongoDB 客户端
navicat-for-mongodb https://www.navicat.com/en/download/navicat-for-mongodb
MongoDB Compass 客户端 https://www.mongodb.com/try/download/compass
Robomongo https://robomongo.org/
studio3t https://studio3t.com/download-now/
windowns MongoDB server
下载地址:
https://www.mongodb.org/dl/win32/
安装教程:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/
mongodump、mongorestore等工具下载
https://www.mongodb.com/try/download/database-tools
MongoDB 数据库工具文档 https://docs.mongodb.com/database-tools/