Mongo DB:使用$ all有什么性能问题

时间:2016-07-04 07:21:55

标签: mongodb performance

我正在尝试在文档数组的文档中搜索匹配字段的值列表。使用$ in使我在提供的值之间进行OR运算。使用$ all似乎更合乎逻辑。

例如:

收藏:短语 示例文档:

{
  "locales": [
    {
      "name": "BPT",
      "internal_desc": "Entre 2 e 3 horas"
    },
    {
      "name": "JPN",
      "internal_desc": "2 ~ 3 時間"
    }
  ]
}

查询:

db.phrases.find({"locales.name":{"$all":["BPT", "JPN"]}})

但有些帖子暗示$ all在性能方面表现不佳。还有其他方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:1)

使用$而不是$ all将导致相同的性能。最重要的是,鉴于你想要用$ all完成的事情是你最好的选择(就我的理解而言)。但是,可以通过使表达式中的第一个元素更具选择性来优化$ all。例如,如果您知道“BPT”出现在2%的文档中,而“JPN”出现在20%的文档中,则将“BPT”列为$ all表达式中的第一个元素是有意义的。这样mongo只需要在$ all表达式中的每个连续元素上过滤较少的文档。我确定你已经看过文档但是这里仍然是一个链接:$all - mongodb

答案 1 :(得分:0)

您可以使用$和语法,如下面的查询所示;

db.phrases.find({$and : [
  {"locales.name" : "BPT"},
  {"locales.name" : "JPN"}
    ]
  });

您可以使用explain命令获取有关查询的信息,以查看数据库在执行查询时所执行的操作,如下所示;

db.phrases.explain().find({$and : [
  {"locales.name" : "BPT"},
  {"locales.name" : "JPN"}
    ]
  });

虽然,explain命令与使用索引的dbs更相关,因为它可以为您提供有关db在搜索时使用的索引的信息。

快速浏览MongoDB索引并解释()以获取更多信息。

我希望这会有所帮助。

此致

尼克。