This commit is contained in:
RainSun 2019-11-06 13:57:28 +08:00
parent 82be1bb4a6
commit e5bed9ea40
7 changed files with 410 additions and 1 deletions

View File

@ -33,7 +33,7 @@
btn.onclick = function() {
console.log(getStyle(dv,'left'))
console.log(getStyle(dv,'margin-left'))
console.log(getStyle(dv,'background'))
console.log(getStyle(dv,'backgroundColor'))
console.log(getStyle(dv,'width'))
}
}

81
20191103/test2.html Normal file
View File

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
div {
height: 200px;
width: 200px;
background: red;
position: absolute;
}
</style>
</head>
<body>
<input type="button" value="400px" id="btn1">
<input type="button" value="800px" id="btn2">
<div id="dv"></div>
<script type="text/javascript">
function my$(id) {
return document.getElementById(id)
}
my$('btn1').onclick = function() {
changeanimate(my$('dv'),'height',1000)
}
//获取任意元素的任意一个样式的属性值
function getStyle(ele,attr) {
return window.getComputedStyle(ele,null)[attr] ? window.getComputedStyle(ele,null)[attr] : ele.currentStyle[attr]
}
//改变宽度
//任意元素的任意一个属性的变速动画的封装
function changeanimate(ele, attr, target) {
clearInterval(ele.timer)
ele.timer = setInterval(function(){
var current = parseInt(getStyle(ele,attr))
var step = (target - current) / 10
step = step > 0? Math.ceil(step) : Math.floor(step)
current += step
if(target == current) {
clearInterval(ele.timer)
ele.timer = null
}
ele.style[attr] = current + 'px';
},10)
}
function changeanimate(ele,json) {
//假设都到达的时候
var flag = true;
clearInterval(ele.timer)
//遍历
for(var attr in json) {
ele.timer = setInterval(function(){
var current = parseInt(getStyle(ele,attr))
var step = (json[attr] - current) / 10
step = step > 0? Math.ceil(step) : Math.floor(step)
current += step
if(json[attr] != current) {
// clearInterval(ele.timer)
// ele.timer = null
flag = false
}
ele.style[attr] = current + 'px';
},10)
}
if(flag) {
clearInterval(ele.timer)
}
}
</script>
</body>
</html>

0
20191106/20191106.md Normal file
View File

9
Miscellaneous/flask.md Normal file
View File

@ -0,0 +1,9 @@
#flask
* venv
* 关闭 `deactivate`
* 在路由中
* 同时有user/ 和 user 优先解释 user/
* 只有 user 的情况下 访问user/会报404
* 只有 user/ 的情况下 访问user会被重定向

7
Miscellaneous/linux.md Normal file
View File

@ -0,0 +1,7 @@
# linux
查看所有端口占用情况
`netstat -ntlp`
创建文件
`touch`

309
Miscellaneous/mongoDB.md Normal file
View File

@ -0,0 +1,309 @@
# mongoDB
### 创建新用户
```js
db.createUser(
{
user: "yingbo",
pwd: "623910ert",
roles: [ { role: "dbAdmin", db: "yingbo" },{ role: 'readWrite', db: "yingbo"} ]
}
)
db.createUser(
{
user: "admin",
pwd: "rqRrjTDaq9",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
```
### log目录 `/var/log/mongodb/mongod.log`
### db目录 `/var/lib/mongo`
### 配置文件 `/etc/mongod.conf`
### 端口 12236
### 启动/重启/停止 `sudo service mongod start/restart/stop`
### 开启用户认证 conf 文件加
```
security:
authorization: enabled
```
### 登录
``` c
//方法一
mongo --port 12236 -u "admin" -p "rqRrjTDaq9" --authenticationDatabase "admin"
//方法二
db.auth("yingbo", "623910ert")
db.auth("admin", "rqRrjTDaq9")
```
### 显示所有数据库
`show dbs`
### 删库
```
use <dbname>
db.dropDatabase()
```
### 显示所有集合
`show tables` 或者 `show collections`
### 创建集合
```js
//正常情况下直接插入数据就可以自动新建一个集合
//创建固定集合 mycol整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("<collectionName>", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
//单纯的新建一个集合
db.createCollection("<collectionName>")
```
### 删除集合
`db.<collectionName>.drop()`
### 增
`db.<collectionName>.insert(<object>)`
### 删
`db.<collectionName>.remove({key:value})` find里边可以为{}删除全部
### 改
```
db.<collectionName>.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
/*
query : update的查询条件类似sql update查询内where后面的。
update : update的对象和一些更新的操作符如$,$inc...也可以理解为sql update查询内set后面的
upsert : 可选这个参数的意思是如果不存在update的记录是否插入objNew,true为插入默认是false不插入。
multi : 可选mongodb 默认是false,只更新找到的第一条记录如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
*/
```
### 查
`db.<collectionName>.find({key:value})` find里边可以没有参数
```
//格式化显示
db.col.find().pretty()
//条件语句
db.col.find({likes : {$lt :200, $gt : 100}}).pretty() //限制 100<likes<200
$lt:小于
$lte:小于或等于
$gt:大于
$gte:大于或等于
$ne: 不等于
$type:
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已废弃。
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255 Query with -1.
Max key 127
//AND
db.col.find({key1:value1, key2:value2}).pretty()
//OR
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
//AND+OR
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
```
---
## Limit与Skip方法
`db.<collectionName>.find().limit(<number1>).skip(<number2>)`
number1 : 本次查询最多显示条数
number2 : 本次查询跳过的条数
---
## sort() 方法
`db.<collectionName>.find().sort({<key>:<number>})`
key : 需要进行排序的键名
number : 其中 1 为升序排列,而 -1 是用于降序排列
---
## createIndex() 方法
`db.values.createIndex({<key>: <number>, <key>: <number>}, {background: true})`
key : 需要进行排序的键名
number : 其中 1 为升序排列,而 -1 是用于降序排列
建索引过程会阻塞其它数据库操作background可指定以后台方式创建索引即增加 "background" 可选参数。 "background" 默认值为false。
---
## aggregate() 方法
```
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "runoob.com",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
```
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id :
"$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
## 管道
$project修改输入文档的结构。可以用来重命名、增加或删除域也可以用于创建计算结果以及嵌套文档。
```
结果中就只还有_id,tilte和author三个字段
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
连id一起删除
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
```
$match用于过滤数据只输出符合条件的文档。$match使用MongoDB的标准查询操作。
```
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
```
$limit用来限制MongoDB聚合管道返回的文档数。
$skip在聚合管道中跳过指定数量的文档并返回余下的文档。
```
db.article.aggregate(
{ $skip : 5 });
```
$unwind将文档中的某一个数组类型字段拆分成多条每条包含数组中的一个值。
$group将集合中的文档分组可用于统计结果。
$sort将输入文档排序后输出。
$geoNear输出接近某一地理位置的有序文档。
---
## MongoDB 复制(副本集)
等树莓派装完再看
## MongoDB 分片
等树莓派装完再看
## 备份
`mongodump -h dbhost -d dbname -o dbdirectory`
-h
MongDB所在服务器地址例如127.0.0.1当然也可以指定端口号127.0.0.1:27017
-d
需要备份的数据库实例例如test
-o
备份的数据存放位置例如c:\data\dump当然该目录需要提前建立在备份完成后系统自动在dump目录下建立一个test目录这个目录里面存放该数据库实例的备份数据。
## 恢复
`mongorestore -h <hostname><:port> -d dbname <path>`
```
--host <:port>, -h <:port>
MongoDB所在服务器地址默认为 localhost:27017
--db , -d
需要恢复的数据库实例例如test当然这个名称也可以和备份时候的不一样比如test2
--drop
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>
mongorestore 最后的一个参数设置备份数据所在位置例如c:\data\dump\test。
你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir
指定备份的目录
你不能同时指定 <path> 和 --dir 选项。
```

3
Miscellaneous/nginx.md Normal file
View File

@ -0,0 +1,3 @@
# nginx
service nginx restart