2017-09-29 1 views
0

내 nodejs 응용 프로그램에서 decimal128 데이터 형식을 사용하려고합니다.십진수 지원 Mongodb

몽고 버전 "3.4.2",

OS : {유형 : "다윈"이름 : "맥 OS X", 아키텍처 : "x86_64에"버전 "16.7.0"

nodejs 버전 6.11.2

몽구스 버전 4.11.13

몽구스 사용하여 기본 MongoDB의 드라이버 버전 2.2.31

,

MongoDB를의 설정 :

storage: 
    engine: wiredTiger 
    dbPath: "/Users/backend/Desktop/mongo/data" 

내가 뭘? 내가있어 몽구스 하위 스키마이 스키마는 다음과 스키마 문서의 하위 문서입니다

const Premises = mongoose.Schema({ 
    floor   : { type: mongoose.Schema.Types.Decimal128, required: true }, 
    deleted   : { type: Boolean, default: false }, 
    created_at  : { type: Date, default: Date.now }, 
    updated_at  : { type: Date, default: Date.now } 
}); 

:

var queryFilter = { 
    'deleted'   : false, 
    'buildings._id'  : params.building_id 
    }; 

var premise = { 
    '_id':     mongoose.Types.ObjectId(), 
    'floor': params['floor'] 
    }; 


Block.update(queryFilter, { '$addToSet': { 'buildings.$.premises': premise } }, { safe: true }, function (error, result) { 

     result['_id'] = premise['_id']; 

     callback(error, result || null); 
     return; 

     }); 
: 업데이 트를 방법을 사용하여 메신저

... 
premises   : [ Premises ], 
... 

새로운 하위 문서를 추가하려면

또한 아래 코드를 사용했습니다.

var queryFilter = { 
    'deleted'   : false, 
    'buildings._id'  : params.building_id 
    }; 

    var premise = { 
    '_id':     mongoose.Types.ObjectId(), 
    'floor': mongoose.Types.Decimal128.fromString(params['floor']) 
    }; 

    Block.update(queryFilter, { '$addToSet': { 'buildings.$.premises': premise } }, { safe: true }, function (error, result) { 

    result['_id'] = premise['_id']; 

    callback(error, result || null); 
    return; 

    }); 

그러나 두 경우 모두에서 같은 오류가 발생합니다 :

{ "오류": { "이름": "MongoError를", "메시지": "$ numberDecimal는 저장 유효하지 않습니다." { "ok": 0, "n"} "드라이버": true, "index": 0, "code": 52, "errmsg": "$ numberDecimal 은 저장소에 유효하지 않습니다. : 0, "nModified": 0, "_ ID": "59ce4e8cecba947a9a342f37"}}

나는 싶어

같은 몇 가지 해결 방법을 사용하지 말아

몽구스 더블

내 컬렉션에 음수를 지원합니다. ur 답변 및 솔루션에 대한 많은 노력.

답변

0

배열에 하위 문서를 추가하려고 할 때 "$ numberDecimal이 저장 공간으로 유효하지 않습니다."라는 동일한 문제가 발생했습니다. 내가 사용하는 기존의 배열에 항목을 추가하려면

mongoose.Types.Decimal128.prototype.toJSON = mongoose.Types.Decimal128.prototype.toString; 

: 어쩌면 http://mongodb.github.io/node-mongodb-native/2.2/api/node_modules_bson_lib_bson_decimal128.js.html 에서

Decimal128.prototype.toJSON = function() { 
    return { "$numberDecimal": this.toString() }; 
} 

의 그 최선의 해결책은 아니지만 해결 방법은 아래에 절 도와 줬어요 때문에 나는이 생각하는 경향이 발생

entity.subentities.addToSet(subentity); 
    const updatedEntity = await entity.save();