2017-06-11 3 views
-2

HashMap<u64, usize>bson::to_bson()でエンコードして、MongoDBに格納したいとします。HashMapをbsonにエンコードするときのInvalidMapKeyType

私がコードを実行したとき、それはパニックになり、そのことを私に言ったInvalidMapKeyType(FloatingPoint(....))。そのような型でHashMapをエンコードするのにこのメソッドを使用できないのですか?

+0

Javaによく似た問題が発生します。 BSONオブジェクトは、 "ハッシュキー"が "文字列"であることを期待しており、基本的にはどのように格納されるかです。あなたはあなたのデザインにそのタイプに固執するか、少なくともBSONに変換する前に最初にキャストします。 –

+0

@NeilLunnありがとうございました! – YjyJeff

答えて

1

BSON library disallows all keys that are not stringsBSON 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、私はあなたがその特定のエラーをどのように持っているか分かりません。

関連する問題