[mongodb] how to find dictionary not null

Posted by nopsled
2018.04.30 18:17 데이터베이스

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test2@gmail.com",

    "name" : "test2",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test3@gmail.com",

    "name" : "test3",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


You have to know object's dictionary key.


If you want find loc(dictionary) not null data, using next query.


db.users.find({"loc.country":{$exists:true}}) 



debug result

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


이 댓글을 비밀 댓글로

crontab checker

Posted by nopsled
2018.04.26 18:13 운영체제

직장에서 crontab을 이렇게 열심히 쓸줄은 몰랐다.


심심해서 crontab checker 만들려고 했는데 누가 만들어놨다... 그것도 온라인으로.....


https://crontab.guru/

위 링크에서 cron command 만들고 


http://cron.schlitt.info/


위에서 테스트하면 확실하게 알 수 있다.

'운영체제' 카테고리의 다른 글

/etc/sudoers 권한 변경 실패시  (0) 2018.12.10
linux UTC to KST (also hardware time too)  (0) 2018.06.05
crontab checker  (0) 2018.04.26
ssh process continue after logout  (0) 2018.04.19
Mac high sierra apache connection refused error  (0) 2018.01.08
ssh process continuation  (0) 2015.10.10
이 댓글을 비밀 댓글로

18.02.22 전역

Posted by nopsled
2018.04.25 00:55 일상생활

​​



오래전에 했지만 지금 올린다. 고마운 녀석들😊 고생많았다

'일상생활' 카테고리의 다른 글

중년기사김봉식 매크로  (9) 2018.08.09
18.02.22 전역  (0) 2018.04.25
페이스북 video_xxxx.zip  (0) 2017.12.17
2017.09.12  (0) 2017.09.12
2017.06.10  (0) 2017.06.10
육군 정보보호병  (5) 2016.04.23
이 댓글을 비밀 댓글로

[javascript] calculate datetime

Posted by nopsled
2018.04.24 17:39 프로그래밍

Calculate datetime 2 ways.



1 way will be calculate about YYYY-MM - YYYY-MM


function calMonthRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 7 || val2.length != 7)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1]);
var to_dt = new Date(end_dt[0], end_dt[1]);
return Math.ceil((to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24 / 30);
}

calMonthRange("2017-08", "2018-04")


/*
Debugging output
*/
9




/*
1 way apply code
*/

function formatMonth(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
year = d.getFullYear();

if (month.length < 2) month = '0' + month;

return [year, month].join('-');
}

function calMonthRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 7 || val2.length != 7)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1]);
var to_dt = new Date(end_dt[0], end_dt[1]);
return Math.ceil((to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24 / 30);
}

for(var i=0; i<calMonthRange("2017-08", "2018-04"); i++) {
    console.log(formatMonth(new Date("2017-08").setMonth(new Date("2017-08").getMonth() + i)))
}



/*
Debugging output
*/
2017-08
2017-09
2017-10
2017-11
2017-12
2018-01
2018-02
2018-03
2018-04




2 way will be calculate about YYYY-MM-DD - YYYY-MM-DD

function calDateRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 10 || val2.length != 10)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1], start_dt[2]);
var to_dt = new Date(end_dt[0], end_dt[1], end_dt[2]);
return (to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24;
}

calDateRange("2018-03-22", "2018-04-24")


/*
Debugging output
*/
33




/*
2 way apply code
*/

function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();

if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;

return [year, month, day].join('-');
}

function calDateRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 10 || val2.length != 10)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1], start_dt[2]);
var to_dt = new Date(end_dt[0], end_dt[1], end_dt[2]);
return (to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24;
}

for(var i=0; i<calDateRange("2018-03-22", "2018-04-24"); i++) {
console.log(formatDate(new Date("2018-03-22").setDate(new Date("2018-03-22").getDate() + i)))
}



/*
Debugging output
*/
2018-03-22
2018-03-23
2018-03-24
2018-03-25
2018-03-26
2018-03-27
2018-03-28
2018-03-29
2018-03-30
2018-03-31
2018-04-01
2018-04-02
2018-04-03
2018-04-04
2018-04-05
2018-04-06
2018-04-07
2018-04-08
2018-04-09
2018-04-10
2018-04-11
2018-04-12
2018-04-13
2018-04-14
2018-04-15
2018-04-16
2018-04-17
2018-04-18
2018-04-19
2018-04-20
2018-04-21
2018-04-22
2018-04-23




'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
이 댓글을 비밀 댓글로

[javascript] get ip only using javascript

Posted by nopsled
2018.04.19 18:06 프로그래밍

Client

>> 내부 아이피


/**

 * Get the user IP throught the webkitRTCPeerConnection

 * @param onNewIP {Function} listener function to expose the IP locally

 * @return undefined

 */

function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs

    //compatibility for firefox and chrome

    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

    var pc = new myPeerConnection({

        iceServers: []

    }),

    noop = function() {},

    localIPs = {},

    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,

    key;


    function iterateIP(ip) {

        if (!localIPs[ip]) onNewIP(ip);

        localIPs[ip] = true;

    }


     //create a bogus data channel

    pc.createDataChannel("");


    // create offer and set local description

    pc.createOffer().then(function(sdp) {

        sdp.sdp.split('\n').forEach(function(line) {

            if (line.indexOf('candidate') < 0) return;

            line.match(ipRegex).forEach(iterateIP);

        });

        

        pc.setLocalDescription(sdp, noop, noop);

    }).catch(function(reason) {

        // An error occurred, so handle the failure to connect

    });


    //listen for candidate events

    pc.onicecandidate = function(ice) {

        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);

    };

}


// Usage


getUserIP(function(ip){

    alert("Got IP! :" + ip);

});


>> 외부 아이피

 $.getJSON('http://ipinfo.io', function(data){

console.log(data);

});


얘들도 답이 없는지 외부 사이트로 xhr 쏜다... jQuery 싫으면 axios로 쏴도된다.

출처 : https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only




Server

Routes.route('/testAPI').get(async (req, res) => {

const ip = req.connection.remoteAddress.split(':')[req.connection.remoteAddress.split(':').length-1]

}); 

request 헤더 중에 connection.remoteAddress이 있다. ipv6까지 표시해주는거 같은데 필요없으니까 잘라 주려고 split하고 가져온다.



var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

아니면 그냥 이거 써도 된다.

'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
    • 2018.04.22 11:55
    비밀댓글입니다
    • 안녕하세요.

      늦은 답글 죄송합니다. 네 맞습니다.
    • 아 네이버 블로그 시절 서로 이웃이였던 koreascretForce입니다. 아아 오토핫키 덕분에 자주 왕래했었던 기억이 나네요. 한참 마단오토 제작하셨을 때요! 다름이 아니오라 제가 근 2달 전에 외국에서 온 스팸 메일을 한 번 열고 그 메일에 있는 주소에 들어간 적 있습니다. 허나 그 이후로 영어로 된 스팸 메일이 끊임 없이 오는데 혹 차단할 방법이 있거나 이게 뭐 링크로 들어가서 어떠한 프로그램이 자동으로 설치될 리는 없겠지만 혹여나 그런가 싶어 문의드리고자 간만에 찾아뵙네요.. 혹시 아직도 군인 신분 이신건가요?!
    • 앗 안녕하세요! 오랜만이네요. 걱정 안하셔도 됩니다 ㅋㅋ 대부분 자동으로 수집해서 스팸 쏘는거니까 무시하시면 됩니다!
      2.22에 전역했어요
    • 근데 이전에는 오지 않다가 그 주소를 클릭한 뒤에 메일 주소가 계속 바뀌면서 와서 이거 뭐 어떻게 대응할 지 모르겟어서요ㅠㅠㅋㅋㅌㅌㅌㅌㅌ
이 댓글을 비밀 댓글로

ssh process continue after logout

Posted by nopsled
2018.04.19 17:58 운영체제

node js를 돌리는데 자꾸 죽어서 왜 죽지.. 하고 생각해봤는데 ssh session이 terminate가 되면 프로세스가 처음에는 살아있다가 나중엔 죽어버린다.


그래서 방안이 없나 하다가 (사실 예전에 알았는데 안쓰다보니 까먹었다..) screen을 사용하였다. session이 terminate되어도 잘 돌아간다.




  • screen
    • 스크린 진입 (일반적으로 귀찮으면 그냥 생성하려면 위와같이 입력하면 된다.)
  • screen -r
    • 스크린 세션 진입할때 이름 넣어주면 된다.
  • screen -S
    • 세션의 이름을 지정하여 스크린 진입



나는 자주 쓰는거만 설명하도록 하겠다. (screen 세부 명령어는 알아서 찾아보도록)



npm start &

^A

d


위는 예제다. npm start &로 시작하고 ctrl+a를 누른뒤에 d를 눌러주면 스크린에서 detach되고 ssh session terminate 시켜도 잘 돌아간다.

이 댓글을 비밀 댓글로

mongodb not authorized? how to create database in mongodb

Posted by nopsled
2018.04.18 11:01 데이터베이스

[root@dataking01 data]# mongo

MongoDB shell version v3.4.9

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.4.9

> use testdb

switched to db testdb

> db.createCollection("test_collection")

{

"ok" : 0,

"errmsg" : "not authorized on testdb to execute command { create: \"test_collection\" }",

"code" : 13,

"codeName" : "Unauthorized"

}

>


위와 같이 authorized가 안되어 있어서 컬렉션도 못만들고 난리가 났다.



[root@dataking01 data]# ps -ef | grep mongo

root     11876     1  0 10:57 ?        00:00:01 /usr/bin/mongod --auth -f /etc/mongod.conf

root     12127  8518  0 11:01 pts/0    00:00:00 grep mongo

[root@dataking01 data]# kill -9 11876

[root@dataking01 data]# 


서비스 확인해주고 11876 죽여준다음에


[root@dataking01 data]# /usr/bin/mongod -f /etc/mongod.conf

about to fork child process, waiting until server is ready for connections.

forked process: 12173

child process started successfully, parent exiting

[root@dataking01 data]# 


--auth flag 빼버리고 mongodb를 시작해준다.


그리고 mongo로 접속해서 use database_name, db.createCollection("collection_name") 해주면 된다.


이거 했다고해서 --auth flag를 다시 넣어주는거 깜빡하지말자.. 골로간다



[root@dataking01 data]# ps -ef | grep mongo

root     12173     1  0 11:02 ?        00:00:00 /usr/bin/mongod -f /etc/mongod.conf

root     12232  8518  0 11:03 pts/0    00:00:00 grep mongo

[root@dataking01 data]# kill -9 12173

[root@dataking01 data]#

[root@dataking01 data]#

[root@dataking01 data]# /usr/bin/mongod --auth -f /etc/mongod.conf

about to fork child process, waiting until server is ready for connections.

forked process: 12278

child process started successfully, parent exiting

[root@dataking01 data]# 


--auth flag를 줘야 혹여나 안털린다


오늘의 삽질 끝.

이 댓글을 비밀 댓글로