본문 바로가기

과목

해시 해쉬 해시테이블 해쉬테이블 Hash Hash Table 해쉬 함수에 검색하고자 하는 키 값을 넣으면 해쉬 알고리즘에 의해 해쉬코드가 나온다. 이 해쉬코드를 가지고 배열의 인덱스로 환산해서 값에 접근한다. 그렇기 때문에 해쉬코드만 알면 바로 값을 알 수 있어 검색 시 속도가 굉장히 빠르다. 키는 문자열, 정수, 파일값 등 다양한 입력 자료형이 올 수 있다. 해쉬코드는 항상 같은 길이의 값이 나오게 된다. collision??시간 복잡도 O(1)이지만 collision이 많을 경우 O(n)이다. collision은 동일한 인덱스 공간 안에 값이 여러 개가 있는 경우이다. 해쉬코드로 인덱스 접근을 했는데 보니까 n개의 값이 들어있다면 일일이 확인해야 하므로 최악의 경우 O(n)이다. 이런 문제를 해결하기 위해 값을 골고루 분산시키는 해쉬 알고리즘이 중요하다. 해쉬..
PHP 파일에서 DB 접근 후 랭킹 출력 header는 크로스 오리진으로 인한 다른 서버 접속 불가(자신의 IP가 아니면 서버에 접근 못함(?))를 허용해주는 크로스 오리진 리소스 쉐어링include는 DB 연결을 위한 코드 파일 웹앱에서 ajax로 클라우드 서버의 파일에 접근한다.서버에서는 year, month 등의 값을 받는다. 그리고 month는 2018-09-01부터 2018-09-31까지, 이런식으로 검색되게 하려고 수정하고 ym1, ym2 변수에 넣었다.query에서 랭킹 생성하고 그 밖에 선택할 칼럼을 적는다. table join을 해준다.query 실행 후 나온 결과를 res에 담고 while문을 돌면서 레코드를 한 줄씩 row에 넣는다.row에 있는 칼럼을 쭉 돌면서 result에 넣는다.json 형식으로 반환해서 웹앱에서 값을..
How to delete the embedded document in mongodb {"_id" : ObjectId("5b83e0491ca61552dca474cd"),"title" : "9","updated" : [ ],"date" : ISODate("2018-08-27T20:28:09.566+09:00"),"count" : 4,"comments" : [{"name" : "글쓴이","memo" : "1","_id" : ObjectId("5b9b2ae6f195ca40bcc43802"),"date" : ISODate("2018-09-14T12:28:38.985+09:00")}],"contents" : "9","__v" : 2} findOneAndDelete 함수를 아래처럼 쓰면 embedded document만 삭제되는 게 아니라 글이 통째로 삭제된다. db.collection.findOn..
crontab으로 정해진 시간에 php 파일 실행하기 목표 우분투 리눅스 클라우드 서버에서 crontab을 사용하여 php 파일을 실행시킨다. php파일에는 mysql에 접근하는 코드를 작성한다. linux 콘솔 창에서 crontab -e 명령 입력하면 아래와 같이 주석이 쭉 나오고 # m h dom mon dow command 주석이 마지막으로 나온다.m은 분, minute (0-59)h는 시,hour (0-23)dom은 날짜, day of month (1-31)mon은 달, month (1-12)dow는 요일, day of week (0-7) 0일요일 1월요일...6토요일 7일요일 아래에 0 12 * * *의 의미는 0분, 12시, 모든 날짜, 모든 달, 모든 요일마다 실행하겠다는 의미이다.만약 1분마다 계속 실행하게 하려면 * * * * *이다. 명령..
Mongoose에서 findOneAndUpdate 사용하기 RDBMS에 익숙해지기 위해, MVC를 명확히 하기 위해 사용한 Mongoose에선 arrayFilters를 못 쓰는 것 같다...arrayFilters는 MongoDB에서 사용할 수 있는 함수다. 도큐먼트 내에 필드가 있고 그 필드가 array로 구성되어 있는 경우 그 array의 각 원소에 접근하기 위해 쓰는 함수다. 여튼 MongoDB에선 매우 잘 실행되었지만 Mongoose에선 arrayFilters가 먹히지 않아서 다른 방법을 찾았다. 일단 findOneAndUpdate()라는 함수에서 첫 인자로 어떤 도큐먼트를 찾을지 정해줬다.arrayFilters로 해당 도큐먼트의 array 원소 중 id가 일치하는 애를 찾았다. 그 원소의 memo라는 field를 갱신해줬다. 혹시나 하고 Mongoose를..
MongoDB findOneAndUpdate 1234567891011121314151617181920212223{ "_id" : ObjectId("5b77cf25cdc3bb21d0354be2"), "title" : "newnew", "updated" : [ ], "date" : ISODate("2018-08-18T16:47:49.841+09:00"), "count" : 389, "contents" : "new", "__v" : 18, "writer" : null, "comments" : [ { "name" : "글쓴이", "memo" : "!!!", "_id" : ObjectId("5b7be66d9ff77a3834943b8b"), "date" : ISODate("2018-08-21T19:16:13.788+09:00") } ],}Colored by ..
MongoDB update, findAndModify update 시 $set 설정을 안하면 사용자가 설정한 값만 덮어씌워진다. 해당 field만 바꾸고 싶다면 꼭 $set 붙여야 함. findAndModify도 마찬가지. 첫번째 인자는 찾을 값이다. 투어팁스라는 이름을 찾았다. 두번째 인자는 바꿀 값이다. url, name, explain, category 등의 field를 변경한다.12db.recommendsites.update({name:'투어팁스'},{url:'https://www.jobkorea.co.kr/',name:'jobkorea',explain:'취업 포털',category:'getjob'})cs 만약 name이라는 특정 field만 변경하고 싶다면 12db.recommendsites.update({name:'투어팁스'},{$set:{exp..
MongoDB 문장 속에 있는 일치하는 단어 찾기 regex pattern for finding a specific word that belong somewhere. db.products.find( { sku: { $regex: /789$/ } } )database의 collection이 products, field가 sku인 데이터 중에서 789로 끝나는 단어 검색ex abc789, aaaa789, 789789, 789SELECT * FROM products WHERE sku like "%789";SQL에서는 위와 같이 사용 db.products.find( { sku: { $regex: /^ABC/i } } )field가 sku인 데이터 중에서 ABC로 시작하는 단어 검색, i는 case-insentive(대소문자 구분 안함), ABC나 abc 등이 가능ex ABC, ABC123, abc123 다른 방법1db.listings.aggregate([{$match:{fi..