我有一个带有字段“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 shell 中使用的查询,
db.PlayerAttribute.find({"gameId":"XYZ", "attributes.CrashesCount" : "0"}).count();
第一次它给我的结果大于零(但这是不正确的。例如,如果有 7 个文档与查询匹配,它会说 6),下一次它给出 0,这会发生 5 到 10 分钟.
大约 5 到 10 分钟后,它再次给出非零数(一次),接下来的几次它是零。
当我删除这个索引(“名称”:“pa_gid_iattr_n_idx”)时,它总是给出正确的计数。
知道为什么 hashmap 字段(“name”:“pa_gid_iattr_n_idx”)上的这个索引会使 mongo 产生不正确和不一致的结果吗?
提前感谢您的回复。