MongoDB를 처음 사용하면서 몇 가지 기본 사항을 시험해 보았습니다. 그러나 놀랐습니다. 내가 몇 가지 핵심 개념을 오해 한 것 같지만 아무도 나에게 무슨 일이 일어나는지 말해 줄 수 있니?Group()이있는 MongoDB의 이중 반올림 오류
공식 MongoDB C# 드라이브를 사용하여 10,0000 개의 이러한 문서를 'lots'라는 db 컬렉션에 삽입했습니다.
// Insert some test data
const double price = 29.99;
var bsonDoc = new BsonDocument {
{"glossary", new BsonDocument {
{"title", "example glossary"},
{"GlossDiv", new BsonDocument {
{"title", "S"},
{"price", new BsonDouble(price)},
...
/* full doc chunk removed here for brevity */
...
};
...
const int numObjects = 10000;
for (int i = 0; i < numObjects; i++)
col.Insert(new BsonDocument(bsonDoc));
...
나는 C# 드라이버에서 무엇을 보았는지 믿지 않았기 때문에 쉘에서 이것을 시도했지만 결과는 동일합니다.
db.lots.group ({키 { "glossary.GlossDiv.title"TRUE} 감소 : 함수 (OBJ 아웃) {out.total + = obj.glossary.GlossDiv.price}, 초기 : {총 : 0}}) [{ "glossary.GlossDiv.title": "S", "총"299899.99999995757}] 내가 틀렸다하지만 경우
나를 수정은 안 29.99 * 10000 == ?
아니요. 나는 몽고가 십진수를지지한다고 생각하지 않는다. 나는 그것이 뭔가 근본적이라고 생각했다. C#에서 double을 계산하면 괜찮습니까. 그래서 기대하지 않은 것을 보지 않아서 놀랐습니다. 나는 이미 읽었던 것들 때문에 정수 사용을 고려하고 있었지만 Mongo가 그 안에 소수점이있는 숫자를 받아들이는 것처럼 보였던 이유를 알고 싶다. 감사합니다 존! – cirrus