Mal*_*tha 2 java database spring mongodb
我需要从集合中获取不同的值。这些数据位于集合的字段中。这意味着我需要从用户集合中获取名称集。我使用 cmd 尝试了它,并得到了我需要的结果。但我不明白如何在 spring 文件中编写查询。由于我是 java 新手,所以我没有足够的知识来处理这个问题。
服务.java
package limark.internal.css.services;
import limark.internal.css.core.model.User;
import limark.internal.css.exceptions.ResourceNotFoundException;
import limark.internal.css.persistence.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Array;
import java.time.OffsetDateTime;
import java.util.List;
import static limark.internal.css.core.MessageConstants.USER_NOT_FOUND;
@Service
@Slf4j
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(final UserRepository userRepository){
this.userRepository = userRepository;
}
/**
* Creates a new User
* @param user object
* @return user object
*/
public User create(User user){
user.setCreatedByLoginId("");
user.setCreatedTs(OffsetDateTime.now());
return userRepository.save(user);
}
/**
* Returns list of users.
*/
public List<User> findUsers(){
return userRepository.findAll();
}
/**
* Find user by id
* @param id userId
* @return user
*/
public User findById(@NotNull String id){
return userRepository.findById(id).orElseThrow(()->new ResourceNotFoundException(USER_NOT_FOUND,
id));
}
public User update(@NotNull User user){
user.setLastUpdatedByLoginId("");
user.setLastUpdatedTs(OffsetDateTime.now());
return userRepository.save(user);
}
/**
* sets a user to not active on delete with the given id
*
* @param userId valid user id
* @throws ResourceNotFoundException when user is not found
*/
public void deleteUser(String userId) {
User user =
userRepository
.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException(USER_NOT_FOUND, userId));
user.setActive(false);
user.setLastUpdatedByLoginId("");
user.setLastUpdatedTs(OffsetDateTime.now());
userRepository.save(user);
log.info("The user {} is deleted successfully.", user.getId());
}
/**
* Returns list of users.
*/
public Array findUsersList(){
return userRepository.distinct( "firstName" );
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在里面添加这个查询
/**
* Returns list of users.
*/
public Array findUsersList(){
return userRepository.distinct( "firstName" );
}
Run Code Online (Sandbox Code Playgroud)
您可以在 中引入一个方法来UserRepository检索不同的firstName字段值并返回List<String>.
public interface UserRepository extends MongoRepository<User, String> {
@Aggregation(pipeline = { "{ '$group': { '_id' : '$firstName' } }" })
List<String> findDistinctFirstNames();
}
Run Code Online (Sandbox Code Playgroud)
获取不同名字列表的调用:
List<String> firstNamesDistinct = userRepository.findDistinctFirstNames();
Run Code Online (Sandbox Code Playgroud)
使用 Spring Data MongoDB v2.4 和 MongoDB v4.2 效果很好。
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |