1

我有一个带有字段“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 产生不正确和不一致的结果吗?

提前感谢您的回复。

4

2 回答 2

0

我会尝试以下

  1. 删除和重新创建索引
  2. 通过运行 mongo 修复工具修复数据库
  3. 如果还没有升级到 mongo 2.4.5。
于 2013-08-02T22:02:43.137 回答
0

我不能完全解释为什么它有时会显示结果,有时不会。这听起来像是一个错误,所以请确保您运行的是最新的 MongoDB 版本(在撰写本文时为 2.4.5)。如果您仍然可以重现它,请在http://jira.mongodb.org/browse/SERVER提交问题- 确保提供显示问题的查询、索引创建和示例数据集。

于 2013-08-02T19:01:51.240 回答