HashMap<u64, usize>
をbson::to_bson()
でエンコードして、MongoDBに格納したいとします。HashMapをbsonにエンコードするときのInvalidMapKeyType
私がコードを実行したとき、それはパニックになり、そのことを私に言ったInvalidMapKeyType(FloatingPoint(....))
。そのような型でHashMapをエンコードするのにこのメソッドを使用できないのですか?
HashMap<u64, usize>
をbson::to_bson()
でエンコードして、MongoDBに格納したいとします。HashMapをbsonにエンコードするときのInvalidMapKeyType
私がコードを実行したとき、それはパニックになり、そのことを私に言ったInvalidMapKeyType(FloatingPoint(....))
。そのような型でHashMapをエンコードするのにこのメソッドを使用できないのですか?
BSON library disallows all keys that are not strings。 BSON specは、ドキュメントは要素のシーケンスであり、各要素の前には名前が必要であり、名前は文字列でなければならないと述べています。
文字列をキーとして使用するようにHashMap
を変更すると、問題が解決するはずです。
あなたの質問はわかりません。あなたはHashMap<u64, usize>
があると述べていますが、エラースニペットにはFloatingPoint
があると記載されています。
これは、常にMCVEを作成し、質問するときに入力する必要があるためです。私はあなたが述べたとおりに行い、このサンプルを作成し、私は別のエラーが表示されます。
extern crate bson; // 0.8.0
use std::collections::HashMap;
fn main() {
let mut thing = HashMap::new();
thing.insert(0_u64, 1_usize);
match bson::to_bson(&thing) {
Ok(e) => println!("{:?}", e),
Err(e) => println!("Got an error: {:?}, {}", e, e),
}
}
Got an error: UnsupportedUnsignedType, BSON does not support unsigned type
私が署名した番号にHashMap
を変更した場合、私はエラーの同じクラス取得:
thing.insert(0_i64, 1_isize);
をそれは
Hash
またはを実装していないので、
Got an error: InvalidMapKeyType(I64(0)), Invalid map key type: I64(0)
あなたも、錆でキーとしてf64
を使用してHashMap
することはできません210、私はあなたがその特定のエラーをどのように持っているか分かりません。
Javaによく似た問題が発生します。 BSONオブジェクトは、 "ハッシュキー"が "文字列"であることを期待しており、基本的にはどのように格納されるかです。あなたはあなたのデザインにそのタイプに固執するか、少なくともBSONに変換する前に最初にキャストします。 –
@NeilLunnありがとうございました! – YjyJeff