UpdaterBolt в подсписке - PullRequest
       11

UpdaterBolt в подсписке

0 голосов
/ 12 апреля 2019

Я храню этот вид дерева в монго:

    {
            "00010":
            {
                    "1.1":[1,3,4],
                    "4.0":[2,5]
            },
            "01000":
            {
                    "1.4":[2,4],
                    "3.5":[3,5]
            }
    }

Я бы вставил новый элемент в определенный список, если он существует.

Например, если новое значение:

            "00010":
            {
                    "1.1":[6]
            }

Я бы хотел добиться этого:

    {
            "00010":
            {
                    "1.1":[1,3,4,6],
                    "4.0":[2,5]
            },
            "01000":
            {
                    "1.4":[2,4],
                    "3.5":[3,5]
            }
    }

Пока, если новое значение:

            "00001":
            {
                    "1.5":[2]
            }

Я бы хотел добиться этого:

    {
            "00010":
            {
                    "1.1":[1,3,4,6],
                    "4.0":[2,5]
            },
            "01000":
            {
                    "1.4":[2,4],
                    "3.5":[3,5]
            },
            "00001":
            {
                    "1.5":[2]
            }
    }

и т. Д.

Я пытаюсь использовать стандартный MongoUpdateBolt (), но проблема заключается в запросе и операции обновления. Я изменил метод execute ():

public void execute(Tuple tuple) {
    try{        
        String idTuple = (String) tuple.getValue(0);
        String attrs = (String) tuple.getValue(1);
        String value = (String) tuple.getValue(2);
        Document document = new Document();
        List<String> tupleList = new ArrayList<String>();
        tupleList.add(idTuple);

        document.append("$push", tupleList);

        //get query filter
        Bson filter = queryCreator.createFilter(tuple);

        Bson filter1 = Filters.and(Filters.eq("_id", attrs),
                        Filters.exists(value));

        mongoClient.update(filter1, document, upsert);


        this.collector.ack(tuple);
    } catch (Exception e) {
        this.collector.reportError(e);
        this.collector.fail(tuple);
    }
}

но это решение не работает. Кто-нибудь может мне помочь?

...