MongoRepository 在数组中查找列表
Posted
技术标签:
【中文标题】MongoRepository 在数组中查找列表【英文标题】:MongoRepository Find List in Array 【发布时间】:2017-11-27 22:02:20 【问题描述】:我有一个看起来像这样的document
@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;
我还使用spring data mongodb
对mongodb
数据存储进行操作。
我已经创建了界面
public interface NoteRepository extends MongoRepository<Note, String>
List<Note> findByTags(List<String> tags);
我存储的对象是这样的
[
"noteId": "594e4adc3bc5152218f933b4",
"owner": "system",
"name": "simple note",
"text": "My text",
"tags": [
"tag1",
"tag2",
"tag3"
],
"date": [
1992,
12,
15
]
]
但除非我不提供 tag1, tag2, tag3
到 findByTags
方法的标签列表,否则它不会返回任何结果。例如tag1, tag2
什么都不返回等等等等。
我应该如何对这些标签进行搜索?使用一些TextCriteria
?
【问题讨论】:
【参考方案1】:这取决于您要提供什么。
如果您只想要一个值,那么 MongoDB 不关心数据是否在数组中,而是会在所有条目中查找匹配项
public interface NoteRepository extends MongoRepository<Note, String>
List<Note> findByTags(String tags);
如果您想要一个可变大小列表来比较可能匹配的“任何”,那么有一个keyword used by spring-mongo 会影响$in
操作:
public interface NoteRepository extends MongoRepository<Note, String>
List<Note> findByTagsIn(List<String> tags);
所以第一个是你只希望"tag1"
匹配数据的地方。第二个将匹配List
之类的"tag1", "tag2"
,或者只要“至少一个”实际上存在于正在搜索的数组中。
【讨论】:
但是如果我有一个复合对象Tag
和id
和name
,应该如何进行搜索?创建方法 - findByTagsNameIn
?
@user1432980 不同的东西。您可能会使用@Query
或直接开始使用其他方法。 MongoRepository 实际上只适用于一般的 CRUD。最重要的是,这不是你问的问题。如果您有新问题,那么Ask a New Question以上是关于MongoRepository 在数组中查找列表的主要内容,如果未能解决你的问题,请参考以下文章