【问题标题】:MongoDB takes long time to queryMongoDB查询时间长
【发布时间】:2015-10-16 18:53:42
【问题描述】:

我有一个超过 10000 个文档的集合。每个文档大约 10KB。 当我运行这个查询时:

News
.find({topics: { '$elemMatch': { '$in': ['5606059d924327636fe3e150'] } }, state: 'APPROVED', is_removed: false})

完成查询大约需要 8 秒。

我使用了以下字段的索引:主题、状态和 is_removed。 explain() 查询返回:“millis”:45。

我觉得查询的结果很大(10000*10KB)所以拉数据需要时间吧?

请帮我解释一下,并告诉我如何减少查询时间。

谢谢!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    对于初学者:您的查询过于复杂。

    db.collection.find({
        topics:{ "$in":["5606059d924327636fe3e150","5606059d924327636fe3e151"]},
        state:"APPROVED",
        is_removed: false
    })
    

    此外,您可能希望有一个索引:

    db.collection.createIndex({ topics:1, state:1, is_removed:1 })
    

    【讨论】:

    • 感谢您的回答。我需要搜索与许多主题之一匹配的文档,在这种情况下,我可以这样查询:db.collection.find({ topics::["5606059d924327636fe3e150""5606059d924327636fe3e151"], state:"APPROVED", is_removed:假})
    • @hiepnv 已相应编辑。
    • 由于主题是 ObjectID 的数组,因此上述查询没有返回任何内容。你知道为什么吗?
    • 您能否至少发布一份示例文档?您可能想阅读How do I ask a good question,它大大提高了获得有用答案的可能性。
    • 嗨,马库斯,感谢您的帮助。我现在已经解决了这个问题。问候。
    猜你喜欢
    • 2018-04-20
    • 2019-12-28
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多