2016-09-11 2 views
1

TLDR : 내가 직면 한 가장 큰 문제는 그 객체 중 하나에 중첩 된 키를 사용하여 배열 내부의 객체를 필터링하는 방법을 알 수 없다는 것입니다.rethinkdb에서 ID로 배열의 객체 필터링

이 구조의 스키마를 가정 :

{ 
    some_field: "value", 
    some_array: [ 
    { 
     item: { 
      id: "some rethinkdb key", 
      name: "some object" 
     }, 
     relevant_field: { 
      id: "some rethinkdb key", 
      name: "so relevant", 
      properties: [ 
      { 
       id: "target key", 
       count: 2 
      }, 
      { 
       id: "some other rethinkdb key", 
       count: 1 
      }, 
      ] 
     } 
    }, 
    { 
     item: ... 
    } 
    ] 
} 

문제는 다음이다 : 나는 아이디 '대상 키'와 some_array 내부 객체의 속성 내에서 '수'필드를 업데이트하고 싶습니다. 지금까지 찾은 가장 좋은 방법은 업데이트하려는 항목의 'some_array'위치를 찾은 다음 수락 된 대답 (How to update embedded document?)에 제공된이 질문에있는 메서드를 적용하는 것입니다. 나는 다른 문제에 대해서도이 방법을 성공적으로 사용했지만이 문제는 아닙니다.

EDIT : mlucy의 의견 덕분에 json 구조가 수정되었습니다.

+1

을 내가 당신의 예제를 이해하는 몇 가지 문제가 있어요. 'some_array'의 객체들은 두 개의 필드를 가지는데, 두 개의 필드 모두'id'를 가지고 있고,'properties'의 문법은 올바르지 않습니다 (배열이나 객체라고 생각할 수는 없습니다). – mlucy

+0

@mlucy 감사합니다. 실제로 실수였습니다. Properties는 객체의 배열이며 id로 해당 객체 중 하나를 업데이트하려고합니다. –

답변

0

당신은 쓸 수 있습니다 :

table.update(function(row) { 
    return {some_array: row('some_array').map(function(el) { 
    return {relevant_field: {properties: el('relevant_field')('properties').map(function(prop) { 
     return r.branch(prop('id').eq('target key'), prop.merge({count: prop('count').add(1)}), prop); 
    })}}; 
    })}; 
}) 
+0

이 코드를 테스트했으며 카운트가 증가하지 않았습니다. 게다가 특정 some_array 객체 만 업데이트하기 위해 어느 시점에서도 필터링하지 않고 대신 모든 객체를 업데이트하려고합니다. 죄송합니다.이 답변에 너무 오래 걸렸습니다. –