Mongodb 猫鼬不能储存双重类型?

Mongodb 猫鼬不能储存双重类型?,mongodb,mongoose,Mongodb,Mongoose,我试图在mongodb中存储双BSON类型。我在用猫鼬。我已经尝试了所有可能的方法,但它仍然存储为int。 我试过@mongoosejs/double和mongoose float,但都不起作用 await Variant.insertOne( { price: 345, discount: 10, }, ) 产品模型 import { Schema } from "mongoose" const Doub

我试图在mongodb中存储双BSON类型。我在用猫鼬。我已经尝试了所有可能的方法,但它仍然存储为int。 我试过@mongoosejs/double和mongoose 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

我相信没有Double这样的类型。JavaScript有支持int、float、double等的数字。此外,如果您看到mongoose文档,您将看到double不是有效的类型。相反,您应该使用数字

编辑:在评论中讨论后,我相信这是一个解决办法

const price = 5;
await Model.create({
    price: price * 1.0001,
    ...
});

在数据库中,价格为双精度类型,但值为5.0005。因此,只要您想使用price的值,就可以使用int或.toFixed2或类似函数将小数点限制为2位。

好的,如果mongoose自定义类型不起作用,我可以使用原始mongodb查询

import mongoose, {mongo} from 'mongoose'

const result = await mongoose.connection.collection('Variant').insertMany([{price: new mongo.Double(34)}, {price: new mongo.Double(45)}]) 

const storedValues = result.opt

mongoose本身没有,但我们可以使用插件来创建一个自定义插件。例如@mongoosejs/double,我理解。但目的是什么?在js中,你不需要打字。你可以对任何数字类型进行算术运算,不管它的十进制值是多少。prisma的返回类型是float,但存储的值是int,它会抛出一个错误。所以我应该把价格存储为double@Ehsansarshar我已经更新了我的答案。这可能不是一个完美的解决方案,但它应该是可行的。tnx。但这仍然是一个问题,我希望这能得到解决。因为我已经添加了自定义类型,但不知道为什么不工作为什么说值存储为int?@D.SM是的,如果int存储为int,如果十进制存储为double。但是我想存储为double,不管它是十进制还是非十进制。您有什么证据表明这没有发生?db.Variant.find{price:{$type:double}返回null db.Variant.find{price:{$type:int}返回值
import mongoose, {mongo} from 'mongoose'

const result = await mongoose.connection.collection('Variant').insertMany([{price: new mongo.Double(34)}, {price: new mongo.Double(45)}]) 

const storedValues = result.opt