동적 (런타임) 모음 이름을 사용하여 문서를 업데이트 할 수 없습니다. 예를 들어, 다음 AQL 쿼리가 컴파일되지 않습니다 :
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
UPDATE v WITH { contentsChanged : true } IN PARSE_IDENTIFIER(v._id).collection
그 이유는 UPDATE 및 기타 데이터 수정 문은 자신의 컬렉션 이름은 컴파일 시간 쿼리에 알려질 필요가있다. 물론 바인드 매개 변수를 사용하면 작동하지만 런타임 표현식은 사용할 수 없습니다.
한 가지 해결 방법은 업데이트 할 하드 코딩 된 컬렉션이있을 때마다 여러 번 탐색을 실행하는 것입니다. 여전히 컬렉션 이름에 대한 지식이 필요합니다. 다른 해결 방법은
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
FILTER PARSE_IDENTIFIER(v._id).collection == 'vertexCollection1'
UPDATE v WITH { contentsChanged : true } IN vertexCollection1
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
FILTER PARSE_IDENTIFIER(v._id).collection == 'vertexCollection2'
UPDATE v WITH { contentsChanged : true } IN vertexCollection2
...
순회 이미 당 수집 목록을 생성해야하고, 각 수집에 대한 문제 후속 쿼리하기 : 사이의 그래프 변경하는 경우에도 일관성 문제가있을 수 있습니다. 예를 들어, 다음 쿼리는 모음별로 업데이트 할 키를 반환해야합니다 :
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
LET parts = PARSE_IDENTIFIER(v._id)
COLLECT collection = parts.collection INTO keys = parts. key
RETURN { collection, keys }
예 결과 :
[
{
"collection" : "vertexCollection1",
"keys" : [
"abc"
]
},
{
"collection" : "vertexCollection2",
"keys" : [
"xyz",
"ddd"
]
}
]
을 결과 구조를 사용하여 후속 업데이트 쿼리를 쉽게 구축하고 업데이트 할 수 있습니다 보냈습니다.
출처
2016-11-10 12:37:24
stj
감사합니다. 나는 단지 컬렉션 당리스트를 먼저 수행해야한다는 두 번째 의견을 원했다. – ggendel