我的MongoDB索引是否已损坏?添加其他查询参数会增加找到的文档

时间:2016-04-07 18:42:43

标签: mongodb indexing

我的查询未能找到所有匹配的结果。如果我向特定匹配示例添加其他_id参数,则会收到结果

> db.reviews.count({"contentProvider":"GLORP", "responses.0": {$exists: true}})
0
> db.reviews.count({_id: "1234", "contentProvider":"GLORP", "responses.0": {$exists: true}})
1

第一个查询使用索引:

"indexName" : "contentProvider_1_reviewDetail_1_reviewerUserName_1_providerReviewId_1",

_id的查询当然使用_id_索引:

"indexName" : "_id_"

以下是相关指数:

{
    "v" : 1,
    "key" : {
        "contentProvider" : 1,
        "reviewDetail" : 1,
        "reviewerUserName" : 1,
        "providerReviewId" : 1
    },
    "name" : "contentProvider_1_reviewDetail_1_reviewerUserName_1_providerReviewId_1",
    "ns" : "test.reviews",
    "background" : true
}

使用mongodb版本3.2.3

索引是否已损坏?放弃它并读取它可能会解决问题吗?

1 个答案:

答案 0 :(得分:1)

这是可能的,你当然可以尝试,但不知道你正在使用什么版本的MongoDB,没有看到索引定义,我不能肯定。

有多种不同类型的索引以及索引属性,例如:sparsepartial,可以改变行为并解释为什么索引不会返回您期望的结果。

我建议先检查索引,看看索引定义是否有任何可能导致文档被排除的属性。

如果没有,那么您可以随时删除索引并重新创建它。