Как создать массив пар со всеми комбинациями в n1ql Couchbase - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть вложенный массив объектов в документе Couchbase:

doc1:{

arr:[v1, v2, v3, v4]// v1, v2, v3 are objects

}

Ожидаемый результат

arr[
{v1, v2}, 
{v1, v3}, 
{v1, v4},
{v2, v3},
{v2, v4},
{v3, v4}
]

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Ожидаемый вывод изменен, чтобы отразить действительный JSON.то есть {"один": v1, "два": v2}

SELECT  ARRAY_FLATTEN((ARRAY (ARRAY {"one":v1, "two":v2} FOR v2 IN d.arr[pos+1:] WHEN  v2 IS VALUED END) FOR pos:v1 IN d.arr END),2)
FROM default AS d ;

SELECT RAW ARRAY_FLATTEN((ARRAY (ARRAY {"one":v1, "two":v2} FOR v2 IN arr[pos+1:] WHEN  v2 IS VALUED END) FOR pos:v1 IN arr END),2)
LET arr = [{"x":"a1"},{"x":"a2"},{"x":"a3"},{"x":"a4"}];

SELECT ARRAY_FLATTEN((ARRAY (ARRAY [v1, v2] FOR v2 IN arr[pos+1:] WHEN  v2 IS VALUED END) FOR pos:v1 IN arr END),1) AS b
LET arr = ["one","two","three","four"];
0 голосов
/ 13 сентября 2018

Предполагая, что вы имеете в виду, что arr должен быть массивом массивов, это должно сделать это:

    JsonDocument doc = bucket.get(docId);
    JsonArray arr = doc.content().getArray("arr");
    JsonArray out = JsonArray.create();

    for(int i = 0; i < arr.size() - 1; i ++) {
        for(int j = i; j < arr.size(); j ++) {
            JsonArray subArray = JsonArray.create()
                    .add(out.get(i))
                    .add(out.get(j));
            out.add(subArray);
        }
    }

    doc.content().put("arr", out);
    bucket.replace(doc);
...