node.js에 대한 10진수 / mongoose 내 부동 소수점
저는 node.js / mongoDB / mongoose에서 첫 번째 테스트 앱을 시작합니다. 이것은 DB에 레코드를 만들고 검색하는 것을 목표로 하는 매우 간단한 앱입니다.
다음과 같은 모델을 만듭니다.
var Car = new Schema({
brand : String,
speed : Number,
date : { type: Date, default: Date.now }
});
정수 값 대신 속도에 대한 float 값을 제공할 수 있다는 점을 제외하고는 잘 작동합니다.Decimal과 Float을 시도해 보았지만 작동하지 않습니다.저도 서류에서 찾지 못했습니다.
감 잡히는 게 없어요?
제가 조금 검색해보니 플로트 값을 저장하려면 사용해야 한다는 내용의 이 기사가 있습니다.Number
type. 임의의 float 값을 저장할 수 있습니다.speed
들판.
예, 사용할 수 있습니다.Decimal128
유형.
https://mongoosejs.com/docs/api.html#mongoose_Mongoose-Decimal128
Mongoose 스키마에서 Decimal128을 다음과 같이 사용할 수 있습니다.
speed:{
type:mongoose.Types.Decimal128
}
사용자 지정 항목을 만들 수 있습니다.이와 같이
'use strict';
const mongoose = require('mongoose');
class DoubleType extends Number {
constructor(v) {
super(v);
this.value = v;
this._bsontype = 'Double';
}
toBSON() {
return this;
}
}
class Double extends mongoose.SchemaType {
constructor(key, options) {
super(key, options, 'Double');
Object.assign(this.$conditionalHandlers, {
'$lt': val => this.castForQuery(val),
'$lte': val => this.castForQuery(val),
'$gt': val => this.castForQuery(val),
'$gte': val => this.castForQuery(val),
});
}
cast(val) {
if (val == null) {
return val;
}
if (val._bsontype === 'Double') {
return new DoubleType(val.value);
}
const _val = Number(val);
if (isNaN(_val)) {
throw new mongoose.SchemaType.CastError('Double',
val + ' is not a valid double');
}
return new DoubleType(_val);
}
}
mongoose.Schema.Types.Double = Double;
mongoose.Types.Double = DoubleType;
module.exports = Double;
소스가 @mongoosejs/double에서 복사되었습니다.
mongoDB는 float 유형을 완전히 지원하는 반면, mongoose는 정수인 Number 유형만 지원합니다.mongoose 유형의 Number를 사용하여 mongoDB float 번호에 저장하려고 하면 문자열로 변환됩니다.
이 문제를 해결하려면 값 유형을 확장할 mongoose용 플러그인을 로드해야 합니다.통화나 날짜에 가장 잘 맞는 플러그인이 몇 개 있지만, 당신의 경우에는 https://www.npmjs.com/package/mongoose-double 을 사용할 것입니다.
변경 후의 모델은 다음과 같습니다.
var mongoose = require('mongoose')
require('mongoose-double')(mongoose);
var SchemaTypes = mongoose.Schema.Types;
var Car = new Schema({
brand: {
type: String
},
speed: {
type: SchemaTypes.Double
},
date: {
type: Date,
default: Date.now
}
});
도움이 되길 바랍니다.
언급URL : https://stackoverflow.com/questions/5605551/decimal-float-in-mongoose-for-node-js
'programing' 카테고리의 다른 글
오류: 지원되지 않는 형식 또는 손상된 파일: BOF 레코드가 필요합니다. (0) | 2023.05.03 |
---|---|
Eclipse 템플릿에 사용되는 ${user} 변수 값을 변경하는 방법 (0) | 2023.05.03 |
하위 문서를 만든 후 몽구스에 채우는 방법은 무엇입니까? (0) | 2023.05.03 |
Xcode 10으로 업그레이드한 후 문제 발생: 빌드 입력 파일을 찾을 수 없습니다. (0) | 2023.05.03 |
각 ID에 대한 Postgresql 추출 마지막 행 (0) | 2023.05.03 |