'MongoDB'에 해당하는 글 1건

Parse push failed

Daily/Prog 2017. 2. 1. 16:51

Error generating response. ParseError {

  code: 135,

  message: 'at least one ID field (deviceToken, installationId) must be specified in this operation' }


Error generating response. ParseError {

  code: 137,

  message: 'A duplicate value for a field with unique values was provided' }


갑자기 생겨난 원인을 찾기 힘든 parse error 메시지.

마이그레이션 하고 나서 개발자들이 테스트 하다가 이 모양이 됐다.


135 error 는 deviceToken 이나 installationId 가 payload 에 있어야 하는데 없다는 얘기 같고. 그래도 뭔소린지 모르겠고.. 

(deviceToken 이랑 installationId 가 둘다 값이 없는 데이터는 한 개도 없음.)

137 error 는 unique 컬럼에 중복 값이 있다는 오류 같고.

(이것도 검색 결과 나오지 않았음.)


아 놔 에러 메시지가 친절히 나와도 이거 당최 알 수가 없네.

일단 deviceToken 을 살펴보니 테스트들 한답시고 test 와 123456... 이런 문자들이... ㅋㅋ 줸장!

mongoDB 에서 문자의 길이가 64자 미만의 deviceToken 값들을 찾아봤다.



db.getCollection('_Installation').find({$where"this.deviceToken.length < 64"}).limit(10);
cs


Error: error: {

"$err" : "TypeError: Cannot read property 'length' of undefined\n    at _funcs2 (_funcs2:1:46) near '64' ",

"code" : 16722

}


undefined 값들의 길이를 구할 수 없다는 에러가 ㅋㅋ;

토큰이 빈건 또 뭐여...


db.getCollection('_Installation').find({deviceToken: {$existstrue}, $where"this.deviceToken.length < 64"})
cs


조회하고 삭제. (find -> remove 대체.)


이렇게 했는데도 push 가 반절은 발송되지 않았다. unique 컬럼을 찾아봤다.


db.getCollection('_Installation').getIndexes()
cs


unique 키는 installationId_1 이랑 installationId_1_deviceToken_1.

중복값을 체크해 봤다.


db.getCollection('_Installation').aggregate([
       {$group : {_id : "$deviceToken", count : {$sum 1}}},
       {$match : {count : {$gt : 1}}} ])
 
db.getCollection('_Installation').aggregate([
       {$group : {_id : "$installationId", count : {$sum 1}}},
       {$match : {count : {$gt : 1}}} ])
cs


중복값은 없다;


deviceToken 과 installationId 가 마이그레이션 후에 undefined 로 들어간게 2천개 가량 있는데 이 부분이 약간 의심스러움. SDK 문제인지...

index 까지 완전 동일한 테스트 서버에서는 undefined 백개 있어도 잘 보내짐 ㅜㅜ

운영서버는 push 보내려면 또 한 달을 기다려야 하고... 아~ 짜증난다...




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,