2013-08-25 2 views
1

나는 calorie counter에서 일하고 있는데 새로운 레시피를 만들 수 있지만 성분을 업데이트하는 데 문제가 있습니다.하위 객체를 mql로 업데이트하는 방법

내가 다음 MQL와 성분 만들 수 있습니다 : 나는 성분의 측정을 변경하는 경우에는

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    create: 'unless_exists', 
    id: null, 
    quantity: parseFloat(row.$quantity.val()), 
    unit: { 
     id: row.$units.val() 
    }, 
    ingredient: { 
     id: row.ingredientId 
    } 
    } 
} 

을, 2 ~ 3 컵에서,이 쿼리는 새로운 성분을 만들 것이라고 말했다. 나는 입장을 업데이트하려고 노력해 왔습니다. 지금까지 나는 시도했다 : 이것은 오류가 발생

{ 
    connect: 'update', 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: parseFloat(row.$quantity.val()), 
    unit: { 
    id: row.$units.val() 
    }, 
    ingredient: { 
    id: row.ingredientId 
    } 
} 

을 : Can't use [], [{}] or {} in a write.

{ 
    connect: 'update', 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: parseFloat(row.$quantity.val()) 
} 

결과는 Can't use 'connect' at the root of the query입니다.

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    connect: 'update', 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: parseFloat(row.$quantity.val()) 
    } 
} 

오류 : Can't use 'connect': 'update' on a non-unique master property가 표시됩니다. 오류에

{ 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: { 
    connect: 'update', 
    value: parseFloat(row.$quantity.val())                        
    } 
} 

결과 : This value is already in use. Please delete it first. 새로운 하나를 기존 성분을 삭제하고 추가 할 수있는 유일한 방법인가? 는 "하위 객체"하지

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    connect: 'delete', 
    id: row.rowId 
    } 
} 
+0

어떤 언어를 사용하고 있습니까? parseFloat()와 $ quantity는 MQL 표현식이 아닙니다. CVT가 어떻게 연결되는지 이해하지 않고 CVT를 조작하려고하는 것 같습니다. –

+0

저는 javascript와 그 값에 대한 역 참조 (dereference)로 질의를 작성하고 있습니다. 이들은 쓰기 엔드 포인트로 전달되지 않습니다. – Will

답변

1

그것의 만 : 유일한 방법은 이전 항목을 삭제하고 교체하는 경우

같은 쿼리를 개별적으로 모든 성분을 제거 한 번이 아니라 수있는 방법이있다 자체적으로 별도의 노드. CVTs 또는 중재자 유형에 대해 읽는 것이 좋습니다. 속성을 변경하려면 연결을 내부 쿼리로 이동해야합니다.

[{ 
    "id": "/m/0wh8nkh", 
    "/food/recipe/ingredients": [{ 
    "ingredient": { 
     "id": "/en/yeast" 
    }, 
    "quantity": { 
     "connect": "update", 
     "value": 2 
    }, 
    "unit": { 
     "id": "/en/teaspoon", 
     "connect": "update" 
    } 
    }] 
}] 

아니라에서 계산보다 더 : 여기

는 (하나의 성분 노드 지정 효모있다 가정)이 쿼리는 효모의 양을 업데이트합니다 recipe

내 피자 반죽에서 효모 성분 node입니다 재료가 독특하기 때문에 재료 노드의 ID를 가져 와서 저장하는 것이 좋습니다. 이렇게하면 쿼리에서 명시 적으로 참조 할 수 있습니다.

기타 참고 사항 : - 모든 요리법에 새로운 요리를 만들어서는 안됩니다. 많은 요리가 Freebase에 이미 존재해야하며 사용자가 조리법과 별도로 선택할 수 있도록해야합니다. - 당신은 요리에 사용하면

그것은 당신이 생산을 엉망으로하지 않는 있도록 샌드 박스를 사용하고 있는지 위대한 (그러나 성분의 CVT에에) 만들 & 조리법/일반/항목을 추가해야합니다 데이터베이스를 디버깅하는 동안.

+0

수량을 업데이트하는 데는 작동하지만 단위를 업데이트하는 데 같은 양식이 작동하지 않는 것 같습니다. 유닛을 업데이트하는 방법을 보여 주시겠습니까? – Will

+0

단위는 값이 아닌 엔티티이므로 ID 또는 MID를 사용하여 링크합니다. 쿼리를 업데이트했습니다. –

관련 문제