정수를 삽입하려고 할 때 MongoDB 삽입 부동


209
   > db.data.update({'name': 'zero'}, {'$set': {'value': 0}}) 
   > db.data.findOne({'name': 'zero})
    {'name': 'zero', 'value': 0.0}  

Mongo가 정수를 삽입하도록하려면 어떻게합니까?

감사합니다


mongodb의 어떤 버전을 사용하십니까?
kamaradclimber


1
내 경우에는 이미 Long으로 설정된 일부 "val"에서 {$ set : {val : NumberInt (0)}}을 원할 때 변경되지 않았습니다. NumberInt (0)를 적용하려면 먼저 다른 값으로 변경 한 다음 다시 0으로 변경해야합니다.
kommradHomer

실수로 int32를 double로 변경했다는 것을 알았을 때 같은 문제가 발생했습니다 .NumberInt ()를 사용하여 다시 설정하면 처음으로 다른 값으로 변경하지 않는 한 유형을 수정하지 못했습니다.
user1055568

답변:


328
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

NumberLong을 사용할 수도 있습니다.


1
그러나 findOne에서 그것은 NumberLong (0)이 0이 아니라고 말합니다
daydreamer

11
mongo 쉘은 기본적으로 모든 숫자를 부동 소수점 값으로 취급합니다. 따라서 NumberInt 또는 NumberLong과 같이 사용할 숫자 유형을 명시 적으로 지정해야합니다. docs.mongodb.org/manual/core/shell-types
Yadu

12
질문이 있습니다. NumberInt는 mongo 쉘에서만 제공됩니다. node.js와 같은 JavaScript 언어로 어떻게합니까?
萧 易 客

@Shawyeok 여기에 답변이 있습니다 stackoverflow.com/a/21870772/3815843
GRiMe2D

정수에 한계가 있다는 점을 고려하는 것이 중요합니다. 숫자가 큰 경우 NumberLong
Tim Givois

17

(로보 몬고에서) 약간 더 간단한 구문이 저에게 효과적이었습니다.

db.database.save({ Year : NumberInt(2015) });

5

값 유형이 이미 두 배인 경우, $ set 명령으로 값을 업데이트하면 NumberInt () 또는 NumberLong () 함수를 사용할 때 값 유형을 double로 int로 변경할 수 없습니다. 따라서 값 유형을 변경하려면 전체 레코드를 업데이트해야합니다.

var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)

$set적어도 몽고 4.2에서 일 했으므로 아마도 버그 일 것입니다.
Cerberus

-10

글쎄, 그것은 JavaScript이므로 'value'에있는 것은 정수 또는 부동 소수점 일 수있는 숫자입니다. 그러나 JavaScript에는 실제로 차이가 없습니다. 에서 학습 자바 스크립트 :

숫자 데이터 유형

JavaScript의 숫자 데이터 형식은 부동 소수점 숫자이지만 소수 구성 요소가 있거나 없을 수 있습니다. 그들이 소수점 또는 분수 구성 요소가 설치되어 있지 않은 경우, 그들은 정수 기반-10의 -2 범위의 정수로 취급하고 53 2에 (53) .


27
사실은 사실이 아닙니다. JS에는 차이가 없지만 다른 언어 (예 : java)에서 mongo에 연결하자마자 차이를 느낄 수 있습니다.
Omri Spector

2
내 응용 프로그램은 한 가지 이유로 만 다른 점으로 깨졌습니다 .int는 저장되고 float로 반환됩니다. javascript를 사용하는 mongo shell을 통해 수동 삽입 해야하는 원인이 의심됩니다.
Melsi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.