如何根据数组的大小编写芒果过滤器?

问题描述

我想通过指定数组属性的最小和最大大小来查找带有芒果查询的文档。给定一个具有数组属性 customers 的文档。我希望能够找到客户数量在 10 到 20 之间的所有文档。

类似的东西

mango_query = {
  "doc.customers": {"$size": {"gte": 10}},"doc.customers": {"$size": {"lte": 20}}
}

对这样的请求的响应是

Bad argument for operator $size: {[{<<36,108,116,101>>,10}]}')

那么我应该如何根据数组的大小编写芒果过滤器?

解决方法

检查代码here,$size 操作符仅支持整数参数。所以它不能与其他运算符结合使用。它仅支持 $size 精确匹配。

norm_ops({[{<<"$size">>,Arg}]}) when is_integer(Arg),Arg >= 0 ->
    {[{<<"$size">>,Arg}]};
norm_ops({[{<<"$size">>,Arg}]}) ->
    ?MANGO_ERROR({bad_arg,'$size',Arg});

当匹配时

match({[{<<"$size">>,Arg}]},Values,_Cmp) when is_list(Values) ->
    length(Values) == Arg;
match({[{<<"$size">>,_}]},_Value,_Cmp) ->
    false;

length(Values) == Arg 仅支持完全匹配