我在模板代码(html)的表格中输入了 type =" text" 。点击"搜索"时,我会从输入中收集值,如下所示:
$(".filterInput").each(function() {
var column_name = $(this).attr("name")
filters[column_name] = $(this).val();
});
因此,filters是一个json对象,它包含我想要应用的所有过滤器。
然后,我用ajax调用调用一个视图,然后将变量过滤器发送给它。在那里,我将filters变量转换为一个名为query的对象,该对象具有__contains参数。我使用以下代码(python)执行此操作:
query = {}
for k, v in filters.items():
if v:
query[k + '__icontains'] = v
然后我像这样打电话给MongoDB:
result = model.objects.filter(**query).order_by(order_by).skip(page_size*(page-1)).limit(page_size).only(*attr_names)
出于某种原因,对于我的MongoDB中的字符串参数,它工作正常。我可以找到' ca '它会发现像' Ca lamity'或者' al ca 行'。但是,如果我在数字字段中查找 2 ,则只会得到 2 的结果,但不会得到7 2 或 2 34。如果我寻找 234 ,我会得到 234 但不是5 234 6或 234 56
为什么?可能与我将文字与数字进行比较这一事实有关吗?我该如何解决这个问题?为什么它适用于完全匹配的记录?