mongodb - 将 rust_decimal 保存到 mongodb

标签 mongodb rust decimal bson

我正在尝试保存 rust_decimal::Decimal MongoDB 中的对象。

我的第一次尝试通常是:

// self.db is of type mongodb::sync::Database

decimal = Decimal::new(1, 20);
let order = doc! {"decimal": decimal};
self.db.collection("collection").insert_one(order, None).unwrap();

这产生了错误:the trait 'From<Decimal>' is not implemented for 'Bson'

这让我了解了 bson箱。在其文档中我找到了关于 Decimal128 ,Mongo 支持,但似乎没有一种方便的方法来从 Decimal 进行转换或String或任何真正的东西。

如何插入 Decimal反对该文件?

crate 版本:
mongodb 2.2.2
bson 2.3.0
rust_decimal 1.24.0

编辑:我已经尝试过 Decimal128::from_bytes(decimal.serialize())但它在 Decimal 中将 1 变为 Decimal128 中的 4.294967296E-6167 (小/大端问题?)。

最佳答案

Decimal128 的文档明确指出:

Currently, this type can only be used to round-trip through BSON. See RUST-36 to track the progress towards a complete implementation.

所以它不能用于此目的。

相反,我建议您使用 serde。 rust_decimal 支持 serde(具有各种选项和功能标志),bson 也是如此。您可以使用 bson::ser::to_bson() 将类型序列化为 BSON或该模块中的其他功能。例如:

decimal = Decimal::new(1, 20);
let order = doc! {"decimal": to_bson(&decimal).unwrap()};

默认情况下,这会将小数序列化为字符串,但您可以对其进行自定义。请参阅 rust_decimal 的文档。

关于mongodb - 将 rust_decimal 保存到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72644775/

相关文章:

python - Pymongo日期范围(相同日期不同时间)查询没有返回结果

c# - Mongodb - 实体序列化正常,但反序列化时出现 'No serializer found for type' 错误

rust - 将 Iterator<(A,B)> 拆分为 Iterator<A> 和 Iterator<B>

php - 如何在 PHP 中过滤小数输入并对其进行清理

c++ - 我如何将小数格式化为分母限制的分数

javascript - 如何在mongodb中计算总和

mongodb - 如何确定 STARTUP2 BTree 自底向上步骤的整体进度?

rust - 如何使用 web_sys 从 Rust 创建 JS 字符串数组?

multithreading - 如果我与多个线程共享不可变引用,为什么我需要实现 `Copy` 和 `Clone`?

javascript - 在 JavaScript 中使用 onclick() 将小数添加到数字中