2017-06-24 2 views
0

Ich habe ein document bekam, die wie dieses auchMongoRepository Finden Liste in Array

@Document 
public @Data class Note { 

    @Id 
    private String noteId; 
    private String owner; 
    @TextIndexed 
    private String name; 
    @TextIndexed 
    private String text; 
    private List<String> tags; 
    private LocalDate date; 
} 

sieht spring data mongodb Ich verwende auf mongodb Datenspeicher zu betreiben. Ich habe Schnittstelle erstellt

public interface NoteRepository extends MongoRepository<Note, String> { 
    List<Note> findByTags(List<String> tags); 
} 

Meine gespeicherte Objekt sieht wie folgt aus

[ 
    { 
     "noteId": "594e4adc3bc5152218f933b4", 
     "owner": "system", 
     "name": "simple note", 
     "text": "My text", 
     "tags": [ 
      "tag1", 
      "tag2", 
      "tag3" 
     ], 
     "date": [ 
      1992, 
      12, 
      15 
     ] 
    } 
] 

Aber es sei denn, ich bieten nicht die Liste von Tags wie tag1, tag2, tag3-findByTags Verfahren wird es kein Ergebnis zurück. Zum Beispiel tag1, tag2 gibt nichts zurück usw.

Wie soll ich die Suche über solche Tags durchführen? Verwenden Sie einige TextCriteria?

Antwort

1

Es hängt davon ab, was Sie bereitstellen möchten.

Wenn Sie nur ein einziger Wert dann MongoDB kümmert sich nicht darum, ob die Daten in einem Array und werden einfach auf das Spiel schauen in allen Einträgen

public interface NoteRepository extends MongoRepository<Note, String> { 
    List<Note> findByTags(String tags); 
} 

Wenn Sie eine Liste mit variabler Größe zum Vergleich wollen von „any“, dass übereinstimmen kann, dann gibt es eine keyword used by spring-mongo, die die $in Betrieb bewirkt:

public interface NoteRepository extends MongoRepository<Note, String> { 
    List<Note> findByTagsIn(List<String> tags); 
} 

So ist der erste für ist, wo Sie gerade "tag1" wollen die Daten übereinstimmen. Und die zweite würde mit List wie "tag1", "tag2" übereinstimmen, oder irgendetwas, solange "mindestens eine" tatsächlich in dem zu durchsuchenden Array vorhanden war.

+0

Aber wenn ich zum Beispiel ein zusammengesetztes Objekt 'Tag' mit' id' und 'name' habe, wie sollte dann die Suche durchgeführt werden? Methode erstellen - 'findByTagsNameIn'? – lapots

+1

@ user1432980 Andere Sache. Sie würden wahrscheinlich '@ Query' verwenden oder einfach die anderen Methoden verwenden. MongoRepository ist wirklich nur für allgemeine CRUD. Vor allem ist das nicht die Frage, die Sie gestellt haben. Wenn Sie eine neue Frage haben, dann [Eine neue Frage stellen] (https://stackoverflow.com/questions/ask) –

Verwandte Themen