我在mongo python中有一个查询,看起来像:
implementation project(':module-name')
我现在想要匹配" foo_bar"," foo_foe"等名称。等等。所以我使用了常规表达式:
collection.find({"name" : {$in : ["foo_foo", "bar_bar"]}})
但是在查找大量条目时,第二个查询的速度要慢几千倍。我不知道如何改善这一点。任何提示都将非常感激。让我感到惊讶的是匹配了一个" foo_foo" string应该比匹配字符串慢#34; foo _。*"。
答案 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 /匹配后可以停止扫描 前缀。
除此之外,如果你不能添加索引,你可以做很多事情,我想。