2015-11-29 2 views
0

У меня есть JSON с следующей структурой: [[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]Как повторить вложенный JSON с ArangoDB?

Это нормально для ArangoDB? Я попытался нажать его с помощью http-api (у меня нет драйвера для моего языка - D), но я получил error 500, может быть, я ошибаюсь, возможно, этот JSON не подходит для ArangoDB.

Также я хотел бы получить примеры повторения такого JSON с AQL. Например, если мне нужно значение SubAID, где QID is 2, как мне написать такой запрос?

ответ

3

На основном уровне документы в ArangoDB являются объектами JSON. JSON, который вы показываете выше в массиве JSON, поэтому он не будет принят как документ.

Что вы можете сделать, это обернуть выше JSON в качестве атрибута объекта, например data:

{"data":[[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]}

Что касается запросов данных: она выглядит как данные представляют собой массив, содержащий массивы и объект. Внутри массивов есть объект с атрибутами QID и AID в позиции массива 0, и объект, содержащий SubAid в позиции массива 1.

Если это верно для всех данных, то запрос типа следующим образом должен найти документы о том, что QID значение 2:

/* iterate over all documents in collection */ 
FOR doc IN collection 

    LET s = (
    /* iterate over embedded attribute "data */ 
    FOR sub IN doc.data 

     /* look at QID at array position 0 */ 
     FILTER sub[0].QID == 2 

     /* first match is sufficient */ 
     LIMIT 1 

     /* return SubAID value from array position 1 */ 
     RETURN sub[1].SubAID 
) 

    /* only return documents with a match */ 
    FILTER LENGTH(s) > 0 

    /* return first result from subquery (subquery result is always an array) */ 
    RETURN s[0] 
Смежные вопросы