2016-08-04 12 views
0

i Dokument haben wie CouchbaseSpring CrudRepository Abfrage mit Kind Element?

folgende
{ 
    "contentTimestamp": 1470216079085, 
    "version": 12, 
    "content": [ 
    { 
     "text": "ABC", 
     "params": { 
     "TYPE": "TEXT" 
     } 
    } 
    ], 
    "readers": { 
    "u_id_1": 0, 
    "u_id_2": 0, 
    }, 
    "contributors": [ 
    { 
     "id": "u_id_1" 
    } 
    ] 
} 

Dokumentklasse

@Document 
public class ContentDoc implements Serializable{ 

    private static final long serialVersionUID = 1L; 


    @Id 
    private String id; 

    @Field 
    private Integer version = 12; 

    @Field 
    private List<Content> content = new ArrayList<>(); 

    @Field 
    private Map<String, Object> readers = new HashMap<>(); 

    //etc 

    //getter setter 

} 

Dienst

@Service 
public interface ContentDocRepository extends CrudRepository<ContentDoc, String> { 

    public List<ContentDoc> findByReadersIn(String reader) throws Exception; 

} 

Testfall

@RunWith(SpringJUnit4ClassRunner.class) 
public class Tests { 

    @Autowired 
    private ContentDocRepository contentDocRepository; 

    @Test 
    public void cotentDocRepoTest(){ 

     List<ContentDoc> contents = contentDocRepository.findByReadersIn("u_id_1"); 
     Assert.assertNotNull(contents); 
     System.out.println(contents) 
    } 
} 

schrieb ich Code per ab ove, aber nicht in der Lage, das Ergebnis zu erhalten, bekam immer eine leere Arraylist.

Wer weiß, was falsch mit meinem Code und wie kann ich Abfrage mit Kind Element ausführen?

Vielen Dank im Voraus.

Antwort

0

Nach langen RND und Experiment i Lösung bekamen,

wir mit Methodennamen zu finden, untergeordnetes Element haben Art und Weise nicht so wir brauchen nach meiner folgenden Antwort zu tun

Schritte:

1) erstellen Sie benutzerdefinierte Ansicht in Couchbase gemäß folgenden

viewna me: findContentByUser

function (doc, meta) { 

    if(doc._class == "package.model.ContentDoc") { 
    for(var i=0; i < doc.contributors.length; i++){ 
     emit(doc.contributors[i].id, null); 
    } 

    } 
} 

2) Dienst: Bindung Viewname und designDocument mit impl Verfahren gemäß folgenden

@Service 
public interface ContentDocRepository extends CrudRepository<ContentDoc, String> { 

    @View(viewName = "findContentByUser", designDocument="dev_content") 
    public List<ContentDoc> findByContributors_id(String id) throws Exception; 

} 

endlich Ergebnis :)