- 登錄getUser這個(gè)接口用不同的id和unionId去查杭跪,總是出現(xiàn)同一個(gè)結(jié)果仙逻。查接口,斷點(diǎn)檢查系奉。斷點(diǎn)顯示數(shù)據(jù)是正常的缺亮,但是postman數(shù)據(jù)出錯(cuò)杨凑。再看postman。斷點(diǎn)查看3號id出錯(cuò)是因?yàn)閁nionId不對應(yīng)虫蝶,是因?yàn)闇y試復(fù)制的時(shí)候復(fù)制錯(cuò)了,用正確的測試本地和網(wǎng)上的接口都沒問題赁严。
- 索引粉铐,將某列列為索引相當(dāng)于給該列創(chuàng)建了一個(gè)目錄蝙泼,這樣按照那列搜索起來就會快很多,但是同時(shí)存在缺陷就是在增刪改的時(shí)候织鲸,需要重新定義過索引溪胶,所以在這個(gè)過程會慢很多哗脖,對于查詢比較多的數(shù)據(jù)表可以建立索引,增刪改較多的不建立索引橱夭。
- 數(shù)據(jù)庫語言創(chuàng)建索引
db.user.ensureIndex({"name":1,"age":1});
可以創(chuàng)建多個(gè)索引棘劣,1是升序肢娘,-1是降序。 - mongoTemplate或者說spring建立索引可以用注解的方式而钞,在類的屬性前加@TextIndexed 注解這個(gè)屬性為索引。用代碼方式有幾種撬陵,還未測試巨税。
TextIndexDefinition indexDefinition= new TextIndexDefinitionBuilder()(主要錯(cuò)誤在這) .onField("firstName") .onField("middleName") .onField("lastName") .onField("emailId") .build();
(經(jīng)測試目前這個(gè)方法行不通)
mongoTemplate.indexOps(<Classname>.class).ensureIndex(indexDefinition);
TextIndexDefinition textIndex = new TextIndexDefinition.TextIndexDefinitionBuilder().onField(indexName).build();
mongoTemplate.indexOps(DINMonitorLog.class).ensureIndex(textIndex);
(這個(gè)方法也行)
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好像是默認(rèn)id是索引纽哥。
不同方法建的索引可以共存春塌,存在不同的indexFields中只壳。
mongoTemplate.indexOps(Demo.class).dropIndex("key");
用這個(gè)刪除出現(xiàn)錯(cuò)誤暑塑,提示沒有在數(shù)據(jù)庫里面找到那個(gè)key事格。這個(gè)不能是存進(jìn)去的key搞隐,存進(jìn)去之后變成name了劣纲,而name的名字還不一樣了癞季,比如name存進(jìn)去就變成了name_text倘潜,用name_text就可以刪除這個(gè)。變成這個(gè)下劃線name_text的名字的是實(shí)例化TextIndexDefinition 這個(gè)的方法废睦。
變成name_1的是實(shí)例化DBObject的方法嗜湃。
這兩種方法建立的索引是在各自的indexFields中瓤荔,不同的方法有各自的indexFields。用TextIndexDefinition 這個(gè)方法會多一個(gè)_ftsx索引出來今瀑。 mongoTemplate.indexOps(Demo.class).dropIndex("key");
這個(gè)的key其實(shí)是indexFields的標(biāo)識橘荠,有兩個(gè)key就會是這樣的name_text_age_text哥童。DBObject的方法的命名是吧text換成1褒翰。
- shop網(wǎng)上的數(shù)據(jù),在代理人頁面顯示不出代理人朵你,用戶統(tǒng)計(jì)處可以顯示邀請的代理抡医,但是無法顯示代理邀請的用戶早敬。接口代碼一樣大脉,但是返回?cái)?shù)據(jù)不同镰矿,是不是和路徑有關(guān)衡怀“擦疲看到用戶信息是isproxy是0荐类,回想昨天改的內(nèi)容這種情況應(yīng)該是isProxy這個(gè)條件沒有去掉,可能我昨天推送了沒部署屈嗤,之后重新部署了還是不行饶号,看sourcetree有沒有拉下來季蚂,發(fā)現(xiàn)上傳的內(nèi)容沒有我昨天更改的,重新push一次算谈。解決然眼。
- 設(shè)置代理的地方會不會不是自己的代理也取消了葵腹?只能搜索自己的用戶就沒問題。
- 頁面中的undefined需要美化觉义,上次登錄IP沒手機(jī),不要這條字段霉撵。用戶統(tǒng)計(jì)頁面太單調(diào),只有三個(gè)按鈕撕氧,加一些提示性的文字。統(tǒng)計(jì)頁面統(tǒng)計(jì)的表格中計(jì)數(shù)是287剥啤,顯示出來只有282.看代碼府怯,一個(gè)是規(guī)定了類型是2防楷,一個(gè)是沒有規(guī)定。但是例子中兩個(gè)都是達(dá)人冲簿。去掉一個(gè)峦剔,單看一個(gè)代理邀請的人角钩,還是217對應(yīng)222.通過上代理號彤断,看到代理直接邀請的人數(shù)是217.發(fā)現(xiàn)287和282也是相差5.問題出現(xiàn)在29號身上≡籽茫看具體數(shù)據(jù)供炼,29號吧合伙人也邀請了,但是兩個(gè)接口(計(jì)數(shù)和列出的)應(yīng)該都沒限制類型冀墨。正確的應(yīng)該是217涛贯,少的那個(gè)。數(shù)據(jù)庫篩選也是217條虫腋。看數(shù)據(jù)發(fā)現(xiàn)有幾個(gè)人的被邀請人id是1417.數(shù)據(jù)表中有1417趋翻,但是分頁開來的盒蟆,應(yīng)該沒什么影響历等。發(fā)現(xiàn)1417的邀請人是多賬號,但是他的用戶類型是1步脓,所以應(yīng)該確定室友代理邀請的人浩螺。加一條控制條件。數(shù)據(jù)庫中是類型是1的也邀請了5個(gè)人鸳君。
- 代理頁面寫個(gè)提示語或颊,用些bui的小圖標(biāo)传于。
- shell編程。shell是一個(gè)應(yīng)用程序平挑,提供一個(gè)界面通熄,用戶通過這個(gè)界面可以訪問內(nèi)核服務(wù)找都。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 .一般情況下不區(qū)分 Bourne Shell 和
Bourne Again Shell赏枚。所以#!/bin/sh 也可以寫成#隐解!/bin/bash , #!后面的路徑名即是解釋腳本語言的shell應(yīng)用程序诫睬。擴(kuò)展名可以寫.sh摄凡,只是約定俗成的亲澡,并沒有什么影響纫版,文件的第一行是#其弊!/bin/bash 告訴系統(tǒng)腳本需要什么解釋器來執(zhí)行。echo是用來向窗口輸出文本的痹雅,就是打印糊识。 - 運(yùn)行shell腳本。兩種方法愉耙,一種是使文件具有可執(zhí)行權(quán)限朴沿,作文可執(zhí)行程序執(zhí)行鸠真,此時(shí)是要用#!的吠卷,第二種是應(yīng)用解釋器來執(zhí)行,文件名作為參數(shù)货岭,此時(shí)的文件是不用#!來指定解釋器的屯仗。第一種首先進(jìn)入這個(gè)文件的目錄chmod +x ./filename 使文件具有可執(zhí)行權(quán)限魁袜,然后直接執(zhí)行腳本 ./filename 注意兩點(diǎn)敦第,一點(diǎn)是需要在文件中指定解釋器,第二點(diǎn)是需要寫相對路徑鞠呈,否則如果只寫filename的話系統(tǒng)會在path中找蚁吝,而一般只有/bin ,/sbin , /usr/bin , /usr/sbin 等在path中窘茁。第二種運(yùn)行方式是直接用解釋器文件名作為參數(shù)比如/bin/sh filename 或者/bin/php filename后控。這種情況就不用在文件中用#!指定解釋器了捌朴。
- shell的變量砂蔽,注意之處署惯,等號左右不能有空格极谊,變量名也不能有空格轻猖,盡量不要寫空格咙边。不能使用標(biāo)點(diǎn)符號次员。使用變量在變量前加$美元符號淑蔚,加不加大括號都行愕撰,最好所有的都加大括號盟戏,大括號是為了區(qū)分邊界,不至于兩個(gè)單詞寫一起時(shí)找不到變量柿究。賦值變量除了用=外蝇摸,還可以用語句給變量賦值貌夕,語句為for 變量名 In 啡专。们童。慧库。齐板。葛菇。甘磨。只讀變量,這個(gè)有點(diǎn)像java中的static眯停,寫法是readonly 變量名 济舆,規(guī)定只讀變量后,變量就不能被重新賦值了庵朝。 unset 變量名 吗冤,這個(gè)命令可以刪除變量又厉,被刪除的變量不能被再次使用,刪除不了只讀變量椎瘟。
- 字符串規(guī)則覆致,單引號和雙引號還有不用引號都可以,單引號里面的會原樣輸出肺蔚,并且不能用轉(zhuǎn)義字符煌妈,里面不能出現(xiàn)變量,雙引號里面可以出現(xiàn)變量宣羊,也可以出現(xiàn)轉(zhuǎn)義字符之宿,也就是雙引號可以轉(zhuǎn)義。拼接字符串可以不用加號。獲取字符串的長度尺迂,在變量前加#,比如 ${#string},提取子字符創(chuàng)严蓖,比如${string:1:4}吩坝,從第二個(gè)字符開始闸迷,娶四個(gè)腥沽,查找子字符串的位置
expr index "$string" is
盾舌,符號`是反引號,不是單引號,表示在string中找is的位置鼻疮。 - 數(shù)組耿芹,shell中只有一維數(shù)組迹炼,沒有多維數(shù)組砂碉,并且沒有邊界大小,定義數(shù)組是 數(shù)組名=(值1 值2 值3)霎奢,用括號定義赔退,用空格隔開。或者用空行隔開 。 讀取數(shù)組${數(shù)組名[下標(biāo)]}立砸。使用@符號可以獲取數(shù)組中的所有元素螺戳,例如:echo ${array_name[@]}。獲取數(shù)組的長length=${#array_name[@]}堕伪。
- 注釋,在行的開頭寫#而咆,只有單行注釋涯捻,沒有多行注釋望迎,如果要多行注釋可以有小技巧,吧這些用花括號括起來胸墙,定義成一個(gè)函數(shù),如果不調(diào)用這個(gè)函數(shù)剿另,這些代碼就不執(zhí)行馏臭,起到和注釋一樣的效果。