gpt4 book ai didi

mongodb - 如何在 java/scala 中使用 inc 运算符创建 Decimal128 字段

转载 作者:可可西里 更新时间:2023-11-01 10:15:06 41 4
gpt4 key购买 nike

我有以下文档结构:

{
"moneys": {
"someKey": NumberDecimal(99)
...
"someOtherRandomKey": NumberDecimal(99)
}
{

我想要的:当不存在的字段递增时,创建该字段NumberDecimal 值。

我用 scala 驱动程序尝试过,但不能这样做:

//not compiles
collection.findOneAndUpdate(filters,Updates.inc("someOtherKey", new Decimal128(50)))

因为 Updates.inc(k,v) 需要 NumberDecimal128 不是 Number

我认为问题不在驱动程序中,而是在我的逻辑上。

如何使用 scala/java 驱动程序实现我的案例?

最佳答案

通过为 scala.math.BigDecimal 实现编解码器解决了问题:

class BigDecimalScalaCodec extends Codec[scala.math.BigDecimal] {

override def encode(writer: BsonWriter, value: scala.math.BigDecimal, encoderContext: EncoderContext): Unit = {
writer.writeDecimal128(new Decimal128(value.bigDecimal))
}

override def getEncoderClass: Class[scala.math.BigDecimal] = classOf[scala.math.BigDecimal]

override def decode(reader: BsonReader, decoderContext: DecoderContext): scala.math.BigDecimal = {
reader.readDecimal128().bigDecimalValue()
}
}

在mongo中注册:

 val codecRegistry = fromRegistries(fromCodecs(new BigDecimalScalaCodec()), DEFAULT_CODEC_REGISTRY)

val database: MongoDatabase = mongoClient.getDatabase("dbName")
.withCodecRegistry(codecRegistry)

现在我们可以使用 scala.math.BigDecimal:

collection.findOneAndUpdate(filters,Updates.inc("someOtherKey", BigDecimal(99))

关于mongodb - 如何在 java/scala 中使用 inc 运算符创建 Decimal128 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053457/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com