在mongo python中表现迟缓

时间:2018-01-19 11:26:19

标签: python regex mongodb

我在mongo python中有一个查询,看起来像:

implementation project(':module-name')

我现在想要匹配" foo_bar"," foo_foe"等名称。等等。所以我使用了常规表达式:

collection.find({"name" : {$in : ["foo_foo", "bar_bar"]}})

但是在查找大量条目时,第二个查询的速度要慢几千倍。我不知道如何改善这一点。任何提示都将非常感激。让我感到惊讶的是匹配了一个" foo_foo" string应该比匹配字符串慢#34; foo _。*"。

1 个答案:

答案 0 :(得分:0)

你可能想尝试这样做:

  function get_product_detail(id)
  {
     $.ajax({
     type: "POST",
      url: "<?php echo site_url();?>Controller/function/"+id,
      }).success(function(data) {

      $("#product_data").html(data);
      $("#modal").modal("show");

   });
  }

甚至

collection.find({ $or : [{"name" : {"$regex" : "^foo_" }}, 
   {"name" : {"$regex" : "^bar_" }}] })

您应该看到执行时间的大幅改善。原因是你的正则表达式在字符串中有效地搜索“foo_”,而不一定是从字符串的开头。所以它会匹配“foo_”以及“someotherfoo_”,但在后一种情况下,它需要一直解析到字符串的末尾。

请务必阅读并理解docs的一部分:

  

此外,当/ ^ a /,/^a。 /,和/^a。 $ /匹配当量   字符串,它们具有不同的性能特征。所有这些   如果存在适当的索引,则表达式使用索引;然而,   /^a./,和/^a.$/比较慢。 / ^ a /匹配后可以停止扫描   前缀。

除此之外,如果你不能添加索引,你可以做很多事情,我想。