数组文档中的匹配元素有时会变得很慢

时间:2019-09-14 13:01:39

标签: mongodb

我有一个mongodb集合,其中包含约100.000个文档。 每个文档都有约100个元素的数组。是这样的字符串数组:

features: [
    "0_Toyota",
    "29776_Grey",
    "101037_Hybrid",
    "240473_Iron Gray",
    "46290_Aluminium,Magnesium",
    "2787_14",
    "9350_1920 x 1080",
    "36303_Y",
    "310870_N",
    "57721_Y"
    ...

进行这样的查询非常快。但是有时会变得很慢,包括$ and中的特定额外条件。我不知道为什么会这样。当变慢时,它需要40秒钟以上。总是在相同的额外条件下发生。它很可能在其他情况下发生。

db.products.find({ 

    $and:[
    {
        "features" : {
            "$eq" : "36303_N"
        }
    },
    {
        "features" : {
            "$eq" : "91135_IPS"
        }
    },
    {
        "features" : {
            "$eq" : "9350_1366 x 768"
        }
    },
    {
        "features" : {
            "$eq" : "178874_Y"
        }
    },
    {
        "features" : {
            "$eq" : "43547_Y"
        }
    }
    ...

我在我的UNIX笔记本电脑和Linux服务器实例上运行相同的mongodb。 还尝试对具有相同结果的字段“特征”建立索引。

2 个答案:

答案 0 :(得分:0)

在mongo查询中将$all与数据一起使用可帮助您查询数组

首先在features上创建索引

使用此查询可能对您有帮助

db.products.find( { features: { $all: ["36303_N", "91135_IPS","others..."] } } )

顺便说一句, 如果查询非常慢,请从mongod日志中获取慢速操作
显示您的mongodb版本。
查询时写任何内容(写将阻止某些版本的读取)

答案 1 :(得分:0)

我已经意识到$ all内部的顺序很重要。我通过集合中存在的文档数量(升序)更改元素的顺序。使查询更具选择性。

以前,查询需要大约40秒才能执行,现在,对元素进行排序需要大约22秒。

反正还有很多秒。