Я пытаюсь сохранить двойной тип BSON внутри mongodb. Я использую mon goose. Я пробовал все возможные способы, но все же он хранится как int. Я пробовал @ mongoosejs / double и mon goose -float, но ни один из них не работает.
await Variant.insertOne(
{
price: 345,
discount: 10,
},
)
модель продукта
import { Schema } from "mongoose"
const Double = require("@mongoosejs/double")
// const Float = require("mongoose-float").loadType(mongoose)
export const ProductVariantEmbeddedSchema = new Schema({
price: Double,
discount: Double,
})
вот настраиваемый тип, который я создал помощь @ mongoosejs / double.
import mongoose from "mongoose"
export default function mongooseDouble(mongoose) {
class DoubleType extends Number {
constructor(v) {
super(v)
this.value = v
}
toBSON() {
return this.value
}
}
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
}
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
return mongoose
}
// экспорт по умолчанию Double