如何编写查询以从 mongodb 集合中获取不同的值?

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)

pra*_*ad_ 7

您可以在 中引入一个方法来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 效果很好。