MongoTemplate filter in 异常

解决 ArrayOperators.in Arrays.asList(value,field)顺序颠倒 导致生成sql无法执行

public class MyIn implements AggregationExpression {
    private final Object value;

    private MyIn(List<Object> values) {

        this.value = values;
    }

    public static MyIn Buider(final String fieldReference, Object value) {

        Assert.notNull(fieldReference, "FieldReference must not be null!");
        return new MyIn(Arrays.asList(fieldReference, value));

    }

    @Override
    public Document toDocument(AggregationOperationContext context) {
        return this.toDocument(value, context);
    }

    protected String getMongoMethod() {
        return "$in";
    }

    public Document toDocument(Object value, AggregationOperationContext context) {
        return new Document(getMongoMethod(), unpack(value, context));
    }

    private Object unpack(Object value, AggregationOperationContext context) {
        if (value instanceof AggregationExpression) {
            return ((AggregationExpression) value).toDocument(context);
        }


        if (value instanceof List) {

            List<Object> sourceList = (List<Object>) value;
            List<Object> mappedList = new ArrayList<>(sourceList.size());

            sourceList.stream().map((item) -> unpack(item, context)).forEach(mappedList::add);

            return mappedList;
        }

        if (value instanceof Map) {

            Document targetDocument = new Document();

            Map<String, Object> sourceMap = (Map<String, Object>) value;
            sourceMap.forEach((k, v) -> targetDocument.append(k, unpack(v, context)));

            return targetDocument;
        }
        return value;
    }
}

    .filter("item", MyIn.Buider("$$item.partDesc", parts))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值