- 登录getUser这个接口用不同的id和unionId去查,总是出现同一个结果。查接口,断点检查。断点显示数据是正常的,但是postman数据出错。再看postman。断点查看3号id出错是因为UnionId不对应,是因为测试复制的时候复制错了,用正确的测试本地和网上的接口都没问题。
- 索引,将某列列为索引相当于给该列创建了一个目录,这样按照那列搜索起来就会快很多,但是同时存在缺陷就是在增删改的时候,需要重新定义过索引,所以在这个过程会慢很多,对于查询比较多的数据表可以建立索引,增删改较多的不建立索引。
- 数据库语言创建索引
db.user.ensureIndex({"name":1,"age":1});
可以创建多个索引,1是升序,-1是降序。 - mongoTemplate或者说spring建立索引可以用注解的方式,在类的属性前加@TextIndexed 注解这个属性为索引。用代码方式有几种,还未测试。
TextIndexDefinition indexDefinition= new TextIndexDefinitionBuilder()(主要错误在这) .onField("firstName") .onField("middleName") .onField("lastName") .onField("emailId") .build();
(经测试目前这个方法行不通)
mongoTemplate.indexOps(<Classname>.class).ensureIndex(indexDefinition);
TextIndexDefinition textIndex = new TextIndexDefinition.TextIndexDefinitionBuilder().onField(indexName).build();
mongoTemplate.indexOps(DINMonitorLog.class).ensureIndex(textIndex);
(这个方法也行)
DBObject indexOptions = new BasicDBObject(); indexOptions.put("a", 1); indexOptions.put("b", 1); indexOptions.put("c.d", 1); indexOptions.put("e.f", 1); CompoundIndexDefinition indexDefinition = new CompoundIndexDefinition(indexOptions);
(测试可行)
mongoTemplate.indexOps(<Classname>.class).ensureIndex(indexDefinition.unique());
唯一索引。
怎么看是否成功建立索引。命令行中输入 db.things.getIndexes()
可以查看所有索引。那mongoTemplate呢? mongoTemplate.indexOps(Demo.class).getIndexInfo();
试试。移除索引 mongoTemplate.indexOps(Demo.class).dropIndex("key");
和 mongoTemplate.indexOps(Demo.class).dropAllIndexes();
成功,MongoDB好像是默认id是索引。
不同方法建的索引可以共存,存在不同的indexFields中。
mongoTemplate.indexOps(Demo.class).dropIndex("key");
用这个删除出现错误,提示没有在数据库里面找到那个key。这个不能是存进去的key,存进去之后变成name了,而name的名字还不一样了,比如name存进去就变成了name_text,用name_text就可以删除这个。变成这个下划线name_text的名字的是实例化TextIndexDefinition 这个的方法。
变成name_1的是实例化DBObject的方法。
这两种方法建立的索引是在各自的indexFields中,不同的方法有各自的indexFields。用TextIndexDefinition 这个方法会多一个_ftsx索引出来。 mongoTemplate.indexOps(Demo.class).dropIndex("key");
这个的key其实是indexFields的标识,有两个key就会是这样的name_text_age_text。DBObject的方法的命名是吧text换成1。
- shop网上的数据,在代理人页面显示不出代理人,用户统计处可以显示邀请的代理,但是无法显示代理邀请的用户。接口代码一样,但是返回数据不同,是不是和路径有关。看到用户信息是isproxy是0,回想昨天改的内容这种情况应该是isProxy这个条件没有去掉,可能我昨天推送了没部署,之后重新部署了还是不行,看sourcetree有没有拉下来,发现上传的内容没有我昨天更改的,重新push一次。解决。
- 设置代理的地方会不会不是自己的代理也取消了?只能搜索自己的用户就没问题。
- 页面中的undefined需要美化,上次登录IP没手机,不要这条字段。用户统计页面太单调,只有三个按钮,加一些提示性的文字。统计页面统计的表格中计数是287,显示出来只有282.看代码,一个是规定了类型是2,一个是没有规定。但是例子中两个都是达人。去掉一个,单看一个代理邀请的人,还是217对应222.通过上代理号,看到代理直接邀请的人数是217.发现287和282也是相差5.问题出现在29号身上。看具体数据,29号吧合伙人也邀请了,但是两个接口(计数和列出的)应该都没限制类型。正确的应该是217,少的那个。数据库筛选也是217条。看数据发现有几个人的被邀请人id是1417.数据表中有1417,但是分页开来的,应该没什么影响。发现1417的邀请人是多账号,但是他的用户类型是1,所以应该确定室友代理邀请的人。加一条控制条件。数据库中是类型是1的也邀请了5个人。
- 代理页面写个提示语,用些bui的小图标。
- shell编程。shell是一个应用程序,提供一个界面,用户通过这个界面可以访问内核服务。shell脚本编程有很多种,常见的有
Bourne Shell(/usr/bin/sh或者/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh)
最广泛的是Bash .一般情况下不区分 Bourne Shell 和
Bourne Again Shell。所以#!/bin/sh 也可以写成#!/bin/bash , #!后面的路径名即是解释脚本语言的shell应用程序。扩展名可以写.sh,只是约定俗成的,并没有什么影响,文件的第一行是#!/bin/bash 告诉系统脚本需要什么解释器来执行。echo是用来向窗口输出文本的,就是打印。 - 运行shell脚本。两种方法,一种是使文件具有可执行权限,作文可执行程序执行,此时是要用#!的,第二种是应用解释器来执行,文件名作为参数,此时的文件是不用#!来指定解释器的。第一种首先进入这个文件的目录chmod +x ./filename 使文件具有可执行权限,然后直接执行脚本 ./filename 注意两点,一点是需要在文件中指定解释器,第二点是需要写相对路径,否则如果只写filename的话系统会在path中找,而一般只有/bin ,/sbin , /usr/bin , /usr/sbin 等在path中。第二种运行方式是直接用解释器文件名作为参数比如/bin/sh filename 或者/bin/php filename。这种情况就不用在文件中用#!指定解释器了。
- shell的变量,注意之处,等号左右不能有空格,变量名也不能有空格,尽量不要写空格。不能使用标点符号。使用变量在变量前加$美元符号,加不加大括号都行,最好所有的都加大括号,大括号是为了区分边界,不至于两个单词写一起时找不到变量。赋值变量除了用=外,还可以用语句给变量赋值,语句为for 变量名 In 。。。。。。只读变量,这个有点像java中的static,写法是readonly 变量名 ,规定只读变量后,变量就不能被重新赋值了。 unset 变量名 ,这个命令可以删除变量,被删除的变量不能被再次使用,删除不了只读变量。
- 字符串规则,单引号和双引号还有不用引号都可以,单引号里面的会原样输出,并且不能用转义字符,里面不能出现变量,双引号里面可以出现变量,也可以出现转义字符,也就是双引号可以转义。拼接字符串可以不用加号。获取字符串的长度,在变量前加#,比如 ${#string},提取子字符创,比如${string:1:4},从第二个字符开始,娶四个,查找子字符串的位置
expr index "$string" is
,符号`是反引号,不是单引号,表示在string中找is的位置。 - 数组,shell中只有一维数组,没有多维数组,并且没有边界大小,定义数组是 数组名=(值1 值2 值3),用括号定义,用空格隔开。或者用空行隔开 。 读取数组${数组名[下标]}。使用@符号可以获取数组中的所有元素,例如:echo ${array_name[@]}。获取数组的长length=${#array_name[@]}。
- 注释,在行的开头写#,只有单行注释,没有多行注释,如果要多行注释可以有小技巧,吧这些用花括号括起来,定义成一个函数,如果不调用这个函数,这些代码就不执行,起到和注释一样的效果。