1

次のフィールドを持つエンティティがあります。

var name: String?,
var metadata: org.bson.Document?,
var things: Map<String, MyObject> = mapOf(),
var other_things: Map<String, MyObject> = mapOf(),
@Indexed(unique = true) var hash: String?

とのキーはthingsother_thingsそれぞれのMyObjectオブジェクトのハッシュです。ハッシュにはドットが含まれていません。エンティティを保存すると、マップは正しくシリアル化され、mongodb に保存されます。

マップの例 - mongo コンソールから直接取得しました (MyObjectフィールドをマスクしました...):

{
  "0xa5643bf27e2786816613d3eeb0b62650200b5a98766dfcfd4428f296fb56d043": {
    "field": true,
    "field1": [
      {
        "field1field": "foo",
        "field1field1": "",
        "field1field2": false
      }
    ],
    "field2": "sam",
    "field3": []
  },
  "0xfce353f601a3db60cb33e4b6ef4f91e4465eaf93c292b64fcde1bf4ba6819b6a": {
    "field": true,
    "field1": [
      {
        "field1field": "bash",
        "field1field1": "",
        "field1field2": true
      }
    ],
    "field2": "bar",
    "field3": []
  },
  "0xcdcd77c0992ec5bbfc459984220f8c45084cc24d9b6efed1fae540db8de801d2": {
    "field": true,
    "field1": [
      {
        "field1field": "mash",
        "field1field1": "",
        "field1field2": false
      }
    ],
    "field2": "baz",
    "field3": []
  }
}

ただし、エンティティを取得していずれかのマップのキーを.出力すると、各キーの前に が追加されます。つまり、の出力println(entity.things.keys)

[.0xa5643bf27e2786816613d3eeb0b62650200b5a98766dfcfd4428f296fb56d043, .0xfce353f601a3db60cb33e4b6ef4f91e4465eaf93c292b64fcde1bf4ba6819b6a, .0xcdcd77c0992ec5bbfc459984220f8c45084cc24d9b6efed1fae540db8de801d2]

ここで何が起こっているのかわかりません。誰かが明確にできますか?

NBマップは以前のMap<String, String>もので、この問題はありませんでした

EDIT私は変更thingsし、other_things2つのタイプのList<MySuperObject>フィールドを持ち、mongodbの構造をわずかに変更する(配列として保存されます)-ファントムはなくなりました-しかし、これは元の質問には答えません...StringMyObject.

4

0 に答える 0