package com.novelreader.repository; import com.novelreader.model.NovelDO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface NovelRepository extends MongoRepository { @Query("{ $or: [ { 'name': { $regex: ?0, $options: 'i' } }, { 'author': { $regex: ?0, $options: 'i' } } ] }") Page findByNameOrAuthorContainingIgnoreCase(String keyword, Pageable pageable); @Query("{ 'tags': { $in: ?0 } }") Page findByTagsIn(List tags, Pageable pageable); @Query("{ $and: [ { $or: [ { 'name': { $regex: ?0, $options: 'i' } }, { 'author': { $regex: ?0, $options: 'i' } } ] }, { 'tags': { $in: ?1 } } ] }") Page findByNameOrAuthorAndTags(String keyword, List tags, Pageable pageable); Page findAll(Pageable pageable); // 按作者精确匹配 List findByAuthor(String author); // 按书名前缀匹配(不分页,用于智能搜索) @Query("{ 'name': { $regex: '^?0', $options: 'i' } }") List findByNameStartingWithIgnoreCase(String prefix); // 按书名模糊匹配(不分页,用于智能搜索) @Query("{ 'name': { $regex: ?0, $options: 'i' } }") List findByNameContainingIgnoreCase(String keyword); }