2016-07-07 5 views
2

MongoDB 3.2.1/python 3.4/pymongo/pandas 0.17 (이 질문에 대해서는 후자의 두 가지가 아마 완전히 관련이 없지만)를 사용하고 있습니다.Mongodb 잘못된 결과 찾기 Int64 오브젝트

MongoDB에서 정말 이상하고 잘못된 동작이 나타납니다.

{ 
     "_id" : NumberLong(-1819413477243867792), 
     "targetentity" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1", 
     "tx" : false, 
     "ocname" : ".oc.serv6", 
     "specificproblem" : null, 
     "saf" : false, 
     "iscriticalnode" : null, 
     "checkmask" : null, 
     "notificationidentifier" : 1347592, 
     "province" : null, 
     "usertext" : null, 
     "additionaltext" : "AAA Invalid Response", 
     "director" : ".temip.madrids01_director", 
     "problemoccurences" : 1, 
     "usertags" : null, 
     "managedobject" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1", 
     "isacceptednode" : null, 
     "elementcode" : null, 
     "state" : "Terminated", 
     "probablecause" : "Unknown", 
     "ran" : false, 
     "counttotal" : 1, 
     "locationcode" : "NULL", 
     "problemstatus" : "Closed", 
     "structurednotes" : null, 
     "collection" : "serv6", 
     "operatornotes" : null, 
     "alarmtype" : "CommunicationsAlarm", 
     "workinfo" : null, 
     "perceivedseverity" : "Major", 
     "core" : true, 
     "eventtime" : NumberLong(1467342666000), 
     "originalseverity" : "Major", 
     "vendor" : "Several", 
     "controlelementcode" : null, 
     "outageflag" : false, 
     "incident" : null, 
    } 

이 "_id"는이 해시는 "해시"파이썬 3.4의 내장 방법을 사용하여 계산 기본적이다 :

나는이 같은 문서를 포함하는 컬렉션을 가지고있다.

문제는 삽입 후이 ID를 가진 요소를 찾을 수 없다는 것입니다. 내가 해봤

(이 시점에서 내가 직접 몽고 터미널에 노력하고있어,하지만 Pymongo 이상 그것은 나 같은 결과를 얻을 수) :

db.getCollection('unique_alarm').find({"_id": NumberLong(-1819413477243867792)}

db.getCollection('unique_alarm').find({"_id": -1819413477243867792})

와 대한에게 나는 이걸 얻는다 :

문제는 NumberLong을 어떻게 다룰 지에 대한 것이지만 필드 이벤트 (같은 타입) 나는 전혀 문제가 없다.

db.getCollection('unique_alarm').find({"eventtime" : NumberLong(1467342666000)})

또는 의해 : 내가 쿼리 경우 EVENTTIME에 대한

,

db.getCollection('unique_alarm').find({"eventtime" :1467342666000})

이 두 쿼리는 다시 아무 문제가 첫 번째 문서를 반환하지 않습니다.

무슨 일이 일어나고 있는지 실마리가 있습니까? 처음 두 쿼리가 결과를 0으로 반환하는 이유는 무엇입니까? 내 시행 착오에

더 자세한 정보는 : 필드는 "_id"또는 다른 필드, 나는이 번호를 검색 할 수없는 경우

  • 그것은 문제가 나던
  • 내가 사용하여 이러한 문서를 삽입하고있어 pymongo
  • 내가 (pymongo 또는 MongoDB의 터미널을 사용 중) 다시이 문서를 삽입하려고하면, 나는 중복 키 오류 ...
+0

'인용'하는 나의 해결 방법은 유형에 ** 문자열 ** 변환이었다. 기본적으로, 삽입하기 전에 숫자를 문자열로 변환 한 다음 문자열 값으로 검색하고 완벽하게 작동합니다. 내 추측은 NumberLong과 Mongodb 검색 (아마도 파이썬 해시의 결과와 관련된)의 일부 유형에 약간의 문제가 있다는 것입니다. –

답변

0

대답은 사소한 일일 수 있지만 모두 숫자 long 값에 대해 " 따옴표로 연결됩니다.하나라도 관심이 있다면

삽입 데이터를 조회 할 필요가

db.sofia.find({"_id" : NumberLong("-1819413477243867792")}).pretty() 

{ 
     "_id" : NumberLong("-1819413477243867792"), 
     "targetentity" : "NODOGENERICO .ag.HP_BAR_DEG_APP_1", 
     "tx" : false, 
     "ocname" : ".oc.serv6", 
     .... 
} 

quotes

+0

감사합니다! 따옴표없이 다른 필드 'eventtime'이 반환 된 이유를 알고 있습니까? 0 결과도 반환해야합니까? 나는 그것이 따옴표로 결코 시도하지 않은 이유라고 생각한다. –

+0

쉘에서 자바 스크립트 제한이있을 수 있지만 100 % 확실하지는 않습니다. – profesor79

0

나는 당신의 타격 있다고 생각을 얻을 mongo NumberLong 내에서 일종의 제한.

나는 몽고 콘솔을 연 이것은

> NumberLong(-1819413477243867792) 
NumberLong("-1819413477243867904") 

그래서 난 당신이 NumberLong으로 ("- 1819413477243867904")에 의해 발견하면 가정 것이다 출력 아마 증명 당신은 마술 당신의 기록을 찾아 낼 것입니다, NumberLong 경우 귀하의 해시가 몽고 DB 제한 일종의 타격이다.