フィールド「ia」を持つドキュメントがあります。これは、Java エンティティの HashMap (キーと値のペアを持つ) です。
mongo ドキュメントのPlayerAttributeは次のようになります
{
"_id" : ObjectId("51f8c4cbcd757bd40da8a0c6"),
"gameId" : "XYZ",
"ia" : {
"CrashesCount" : "0",
"HardCurrencyOwned" : "7898",
"LastNotificationsId" : "12",
"Level" : "11",
"PvpRacesPlayed" : "0",
"PvpRaiting_FreeStyle" : "1200",
"PvpRaiting_Motocross" : "1200",
"PvpRaiting_SpeedAndStyle" : "1200",
"PvpRaiting_StepUp" : "1200",
"PvpRank" : "0"
},
"lastSessionExpireTime" : ISODate("2013-07-31T12:31:33.966Z"),
"lastSessionStartTime" : ISODate("2013-07-31T12:31:27.975Z"),
"name" : "abc123",
type : null
}
これは、コレクションのインデックス定義です。
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "player.PlayerAttribute",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"effectiveDate" : 1
},
"ns" : "player.PlayerAttribute",
"name" : "effectiveDate",
"dropDups" : false,
"sparse" : false
},
{
"v" : 1,
"key" : {
"endDate" : 1
},
"ns" : "player.PlayerAttribute",
"name" : "endDate",
"dropDups" : false,
"sparse" : false
},
{
"v" : 1,
"key" : {
"gameId" : 1,
"name" : 1
},
"unique" : true,
"ns" : "player.PlayerAttribute",
"name" : "pa_gid_n_unique_idx"
},
{
"v" : 1,
"key" : {
"gameId" : 1,
"ia" : 1,
"name" : 1
},
"ns" : "player.PlayerAttribute",
"name" : "pa_gid_iattr_n_idx"
},
{
"v" : 1,
"key" : {
"gameId" : 1,
"lastSessionExpireTime" : 1
},
"ns" : "player.PlayerAttribute",
"name" : "pa_gid_lset_idx"
}
]
これは、mongo シェルから使用したクエリです。
db.PlayerAttribute.find({"gameId":"XYZ", "attributes.CrashesCount" : "0"}).count();
初めてゼロより大きい結果が得られます (ただし、これは正しくありません。たとえば、クエリに一致するドキュメントが 7 つある場合は 6 と表示されます)。その後は 0 が返され、これが 5 ~ 10 分間発生します。 .
約 5 ~ 10 分後、ゼロ以外の数値が再び表示され (1 回)、次の数回はゼロになります。
このインデックス ("name" : "pa_gid_iattr_n_idx") を削除すると、常に正しいカウントが得られます。
hashmap フィールド ("name" : "pa_gid_iattr_n_idx") のこのインデックスにより、mongo が不正確で一貫性のない結果を生成する理由は何ですか?
返信ありがとうございます。