BinZhiZhu's Blog

Hello,World.


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

MongoDB基础学习笔记

发表于 2019-06-24 | | 阅读次数:
字数统计: 898 | 阅读时长 ≈ 3

非关系型数据库(NoSql):MongoDB

与关系型数据库的比较

关系型数据库(MySQL):数据库、数据表(table)、数据行

MongoDB:数据库、集合(collections)、文件

我们发现本质的关系还是不变的

安装与运行

我这边的开发环境是统一使用docker部署的,所以只需要在docker-composer补充MongoDB的配置即可,代码如下:

1
2
3
4
5
6
7
8
9
10
# 十分吃内存的nosql数据库
mongo:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
ports:
- 27017:27017
volumes:
- ./mongo:/data/db
  • 在该yaml文件目录下启动docker-composer容器配置:docker-composer up -d
  • docker ps确认容器有没有启动
  • 启动MongoDB咯:docker run mongo 或者 docker exec -it 容器ID (我是喜欢用这个)

推荐直接使用:docker exec -it 容器ID mongo admin,这个时候我们数据库的操作会发现没有权限,这个问题刚开始困扰我很久,因为是新手。后来发现实际上是因为我们连接之后没有鉴权,我们需要使用一个身份去鉴权,也就是我们docker-composer里的root用户,所以我们需要:db.auth(“root”,”123456”) ,这样就代表鉴权成功,可以继续操作curd了。

简单的操作失败信息:

1
2
3
4
5
6
7
8
9
10
11
> use admin
switched to db admin
> db
admin
> db.createCollection("test")
{
"ok" : 0,
"errmsg" : "command create requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
}

很明显提示没有权限操作咯

命令行基础命令

  • show dbs :显示已有数据库,如果你刚安装好,会默认有local、admin(config),这是MongoDB的默认数据库,我们在新建库时是不允许起这些名称的。
  • use admin: 进入数据,也可以理解成为使用数据库。成功会显示:switched to db admin。
  • show collections: 显示数据库中的集合(关系型中叫表,我们要逐渐熟悉)。
  • db:显示当前位置,也就是你当前使用的数据库名称,这个命令算是最常用的,因为你在作任何操作的时候都要先查看一下自己所在的库,以免造成操作错误。

  • use db(建立数据库):use不仅可以进入一个数据库,如果你敲入的库不存在,它还可以帮你建立一个库。但是在没有集合前,它还是默认为空。

  • db.集合.insert( ):新建数据集合和插入文件(数据),当集合没有时,这时候就可以新建一个集合,并向里边插入数据。Demo:db.user.insert({ “name”:”jacky”,”hobby”:”唱、跳、rap、篮球”});
  • db.集合.find( ):查询所有数据,这条命令会列出集合下的所有数据,可以看到MongoDB是自动给我们加入了索引值的。Demo:db.user.find()
  • db.集合.findOne( ):查询第一个文件数据,这里需要注意的,所有MongoDB的组合单词都使用首字母小写的驼峰式写法。
  • db.集合.update({查询},{修改}):修改文件数据,第一个是查询条件,第二个是要修改成的值。这里注意的是可以多加文件数据项的,比如下面的例子。

  • db.集合.remove(条件):删除文件数据,注意的是要跟一个条件。Demo: db.user.remove({
    … “name”:”mike”}
    … );

  • db.集合.drop( ):删除整个集合,这个在实际工作中一定要谨慎使用,如果是程序,一定要二次确认。
  • db.dropDatabase( ):删除整个数据库,在删除库时,一定要先进入数据库,然后再删除。实际工作中这个基本不用,实际工作可定需要保留数据和痕迹的

使用JavaScript敲打MongoDB命令

Shell学习笔记

发表于 2019-06-23 | | 阅读次数:
字数统计: 746 | 阅读时长 ≈ 3

Shell命令

1
#!/bin/bash

变量

1
2
3
4
5
#变量名:不需要使用$符号,"="不能有空格
my_name="BinZhiZhu"

#输出:需要$符号
echo $my_name

字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#单引号

str='I try to learn shell '
echo $str

#双引号:可以有变量,可以有转义字符

str="My name is \"$my_name\",Nice to meet u"
echo $str

#拼接

str1="What's ur name,bro? My name is "$my_name"!"

str2="What's ur name,bro? My name is "{$my_name}"!"

str3="What's ur name,bro? My name is {$my_name}!"

echo $str1
echo $str2
echo $str3

#获取长度:${# + 变量}

str='qwer'

echo ${#str}

#提取子字符串:

str="my name is $my_name "

#提取名字:BinZhiZhu
echo ${str:11}

#提取指定索引范围:name
echo ${str:3:5}

数组

1
2
3
4
5
6
7
8
9
10
11
12
13
#括号括起来 元素之间用空格相隔
array=(a b c d)


#可以直接赋值
array1[0]=1
array1[1]=2

echo "所有元素为:${array[*]}"
echo "第一个元素为:${array[0]}"
echo "第二个元素为:${array[1]}"
echo "第三个元素为:${array[2]}"
echo "第四个元素为:${array[3]}"

流程控制

if的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#运算符 : -gt:大于; -lt:小于; -eq:等于

#if使用

a=6
b=4

if [ $a -gt $b ]
then
echo "a大于b咯"
elif [ $a -eq $b ]
then
echo "a等于b咯"
elif [ $a -lt $b ]
then
echo "a小于b咯"
else
echo "没有找到该条件判断"
fi

#test命令

let num1=2*3
let num2=3+3

if test $num1 -eq $num2
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi


#等价于


let num3=2*3
let num4=3+2

if [ $num3 -eq $num4 ]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi

for循环

1
2
3
4
5
6
7
8
arr=(1 2 3 4)
for loop in ${arr[*]}
do
echo "The Number is: $loop"
done

#写成一行
for loop in ${arr[*]};do echo "Number is: $loop";done;

while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#当num小于等于5条件为true
num=1

while(($num <= 5 ))
do
echo "num is:$num"
let num++
done


#读取键盘信息

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
break
done

until循环

1
2
3
4
5
6
7
8
9
10
11
#until 循环执行一系列命令直至条件为 true 时停止,与while相反

#输入1-10数字咯
a=0
b=10

until [ $a -eq $b ]
do
echo " value is : $a"
let a++
done

case循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#esac的意思与case相反 也就是结束执行
echo "case 循环"

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac


##输入 1 到 5 之间的数字才可结束循环
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done

简单的删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

filePath="del.php"

echo '确认删除del.php文件吗?(y/n)'
read check
case $check in
'y')
rm $filePath;;
'n')
echo '取消删除';;
*)
echo '请输入y/n';;
esac

DOC

[github-shell学习笔记] https://github.com/BinZhiZhu/Shell_study_notes

想自己独立开发个小程序咯~

发表于 2019-06-20 | | 阅读次数:
字数统计: 240 | 阅读时长 ≈ 1

想法从而而来

主要是做开发这么久了,自己还没有一个完整的独立开发的项目。有机会接触了几个月的Taro多端编译型框架的开发,语法是基于react的,所以开发起来也比较舒服,一次编码多端可见。所以突然琢磨了一下,抓一下空闲时间自己独立开发个小程序,但是缺少想法,不知道搞啥,今晚刚刚搞了个demo,因为太无聊,然后v站发了个帖子问问大家,交流下意见咯。h5撸了两个页面,主要是展示下组件而已,然后小程序预览了一下,不得不说Taro 是真的NB,几乎是没有差别的。

贴一些交流的帖子吧 有好的想法才会有目标去完成。。希望自己能够坚持吧

[ v站交流帖子 ]:https://www.v2ex.com/t/576014#reply0

Fighting ~ 冲鸭

毕业一年,回首大学时光

发表于 2019-06-16 | | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 5

距离毕业已经将一年,我其实并不是很擅长写回忆这一类的东西,但是在这个时间节点,以及此时此刻,内心驱使着我去回忆一些过往。

大一,我过得很孤僻

高考失利

我是2014届的,当年高考成绩对我的打击很大,但是我又不能不去接受这个事实。 为什么要这么说?当你高考失利的时候,无非有两种选择:1.复读;2.接受。我是属于后者,因为复读对于我来说是一个很长很长的噩梦,我是一个很难控制自己的情绪的人,可能我此时此刻我很有自信的说:下次我一定会考得比之前好。但是复读是一场持久战,我会觉得很折磨,我的抗压能力很差,所以我选择了后者。当然前者讨论的仅仅是选择性的问题,而我选择了后者,所以我又不得不接受后者产生的一系列问题。不复读的话,意味着尽可能的选择一个相对较好的学校以及专业,很遗憾,好的东西总是与我擦肩而过。我是第三志愿被录取的,虽晚专业不是调剂,但是结果让我很不满意:广州郊区(山卡拉)的某所三本本科独立院校,其实就是烧钱拿个本科文凭,美名其曰”独立学院”。

开学前,遭遇了一场车祸

那也是异常噩梦,跟朋友骑车去游泳的途中,拐弯的时候为了躲闪一辆大车,撞到了路旁的护栏,当时从车上摔下来与地面摩擦大概有2~3米的距离。幸运的是是自己摔倒,并没有与其他车辆发生撞击而摔倒,否则的话,后果不堪设想。

我记得当时爬起来的时候,大家都还有知觉。也不觉得身体有疼痛感,但是手、脚多处擦伤严重,慢慢的我的身体就开始疼痛起来,甚至几度趋于昏迷的状态,这也是因为流血导致的轻微昏迷的状态。我记得当时有那么一刻我的眼睛是看不到的,我当时以为我要瞎了,吓得我哭了起来。那会应该是差不多开学的时候,所以发生了这么一个事情,回到家里,受尽了长辈们的批评与责骂,不过这也是应该的,我也很后悔当时跟着去游泳。跟学校领导请了半个月的假期,当时其实身体并没有完全恢复,是我自己要求提去学校报到的,因为我想参与军训。我是一个很感性的人,认为如果念大学没有经历过军训的洗礼,我会觉得失去了大学的色彩。其实我刚去那会,学校已经军训一个星期左右了,我就是带着这样的一种身体与情绪去大学报到的,现在回想起来还挺特别的,但仔细想想其实是可悲的。

与班集体脱节

经历了那么多的事情,我回到了学校。因为是延迟报到,所以我被分到了一个混合宿舍,并不是跟自己班里的人住在一起。当时觉得对自己不公平,现在想起来:一切都是最好的安排。

报到那会是我爸还有他的一个朋友开着家里的农民车皮卡载我来学校的。宿舍是六人宿舍,就差我一人,后来知道4名是外国语英德双语专业的,还有一名是跟我同系不同专业的。因为我是后面来的,他们已经军训一个星期多了,所以队形队列都是已经拍好了的,哪个方队多少人等等,我还是被安排到了与其他班级一起军训。这就是我为什么说的与班集体脱节,因为宿舍是混合宿舍,军训也是跟其他班级人一起,我基本没什么机会与班级的人产生沟通与交流,那会觉得挺压抑的。毕竟那会是刚刚步入大学,青涩的脸庞,内敛的性格,加上被分配到这么一种环境,对我来说还是有点阻碍的。不过,好在我会自觉主动的去与人沟通,这一点我觉得我还是做得比较好的。军训跟其他班级的一起,慢慢的也会认识一些”战友”,逐渐的就融入了进去。对于班级来说,那会我们一早一晚是要上晚自习的,说起来也是挺尴尬的,挺孤僻的。因为我是混合宿舍,宿舍楼都不是跟同系的人在一个地方,所以我上课都是一个人去的,别人都是一个一个宿舍去上晚自习,而我刚开始都是自己一个人去的,不过还好我还有一个同系的舍友,后来就偶尔会一起去,刚好也有个伴。

大一生活

随着时间的推移,自己也逐步的适应了大学生活。军训完美的结束,我并没有缺席,跟大家一样,我也拥有了自己大学四年的舍友、老师、同学。后来的生活基本都是一个调调:上课、吃饭、社团。我大一加入了好几个社团:

  • 计算机协会;
  • 吉他协会;
  • 青年志愿者协会;

后来大多数的时间都在青年志愿者协会,因为那里的人比较有趣,而且能够做一些力所能及、对社会有益的事情。

大二,我是一个”部长”

大二应该说是玩的最嗨的一年。

大三,我是一个”助理辅导员”

// TODO

大四,我是一个”优秀毕业生”

// TODO

cypress-file-upload真的香

发表于 2019-06-06 | | 阅读次数:
字数统计: 809 | 阅读时长 ≈ 3

cypress-file-upload 是什么

之前有写过一遍博客大致介绍了cypress是什么:前端e2e测试框架(歪果仁开发)。

最近因为有个项目因为改版的原因,差不多到上线的节点了,所以还是希望把测试维护起来。e2e实际上就是end to end 嘛,你如果直接理解为验收测试也不为过。众所周知咯,维护前端测试实际上是一件很麻烦的事情,因为有复杂的业务、复杂的UI交互,人工测试实在是太耗时费力(成本),另外前端项目是比较不那么stable 的。因为前端样式是可能时常变化的,今天断言的这个按钮是红色、明天可能是白色了。所以对于小型公司来说的话,建议是在一个stable 的阶段去维护比较有收益,最近的项目改版就是一个有力的例子。V1版本维护了一套stable的测试用例,突然说需要改版,基本是换肤,对于UI来说基本是不一致的了,这导致之前维护的版本的测试基本是需要重新维护的了。

为什么要使用cypress-file-upload

前端很多场景是需要上传文件的,最通常的就是上传图片。也就是说我们写测试的过程中,例如填写一个表单,需要上传图片,然后才能提交到后台。所以我们是需要模拟上传图片的,简单来说就是把这个事情自动化,本来我们就是自动化测试嘛。之前也写过一些cypress简单的用例,但是上传图片之前没去琢磨过,于是我就去gayhub疯狂的search issues ,大致关键词就是:”cypress how to upload file”。果不其然,还是挺多歪果仁提过这个issue的,所以我就大致认真的看了一下,因为都是英文,所以还是得认真的去消化 :)。我发现了一个关键的issue:https://github.com/cypress-io/cypress/issues/170 然后摸石头过河,发现有些朋友贴出的好的idea :cypress-file-upload , 直接npm install - -save -dev cypress-file-upload 就可以,具体可以直接Google咯。

首先先 npm 安装 cypress-file-upload 哦

大致的用法是,这里贴一下代码块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 上传图片 【自己封了一层】
*
* 参考 https://github.com/cypress-io/cypress/issues/170
*/
Cypress.Commands.add('uploadFile', (fileName, fileType, selector,subjectType) => {
cy.fixture(fileName).then(fileContent => {
// console.log('fileContent',fileContent)
cy.get(selector).upload(
{ fileContent, fileName, mimeType: fileType },
{ subjectType: subjectType },
);
});
});


//模拟图片上传
const fileName = 'images/logo.png';
const fileType = 'image/png';
const subjectType = 'input';
const selector = 'input[type="file"]'

cy.uploadFile(fileName,fileType,selector,subjectType)

有几点注意的:

  1. uploadFile是自己封装的func,需要统一放在commands.js [官方提供的diy func]
  2. 此时直接使用cy.get(…).upload(‘’) 是会报错的 找不到upload 方法,我们需要在commands.js 引入 import ‘cypress-file-upload’ ,之前我也以为npm 安装了即可,但是后来去gayhub 发现需要在commands import一次

最后大功告成咯 : ) ci 上跑了一波 没啥问题 大功告成 cypress真的香哦

1234…8
BinZhi Zhu

BinZhi Zhu

纵使你脚下有一千名挑战者,那就把我算作第一千零一名。

36 日志
4 分类
28 标签
RSS
0%
© 2020 BinZhi Zhu
Copyright © 2018
|
Powered by Hexo | Theme by Next
载入天数...载入时分秒...