【问题标题】:How can I find an object in MongoDB by a match in the array of this object?如何通过该对象数组中的匹配项在 MongoDB 中找到一个对象?
【发布时间】:2021-02-20 19:15:16
【问题描述】:

我有按类型划分的文档:

{
  "_id":{"$oid":"5fa6cdf065249ffc1282e880"},   
  "ask":["java",  
       "what is java",  
       "java is"],  
  "answer":"Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible"
}

如何通过数组中的值获取文档?

例如,我正在写“java is”,我想获取这个文档,但是“java is”在一个数组中。

当“ask”字段是字符串时,我很容易收到文件:

@Repository   
public interface PostRepository extends MongoRepository<Answer, String> {  
  public Answer findAnswerByAsk(String ask);  
}

【问题讨论】:

    标签: java spring mongodb


    【解决方案1】:

    你只需要这个查询

    db.collection.find({
      "ask": "java is"
    })
    

    它将包含'java is'的文档放入ask字段中。

    例如here

    使用 Spring Boot 我无法测试,但使用 @Query 应该可以。

    类似这样的东西(我重复一遍,未测试):

    @Query("{ 'ask': ?0}")
    public Answer findAnswerByAsk(String ask);
    

    【讨论】:

    • 好兄弟!这正是我想要决定的。你给我的资源也不错。告诉我是否有关于在括号@Query 中指定什么的好教程?
    • Baeldung 有多个指南。 Here 解释 @Query 注释。
    【解决方案2】:

    使用 Spring 数据 mongodb 存储库,您可以使用 Containing 关键字搜索集合中的元素。 Reference documentation.

    @Repository   
    public interface PostRepository extends MongoRepository<Answer, String> {  
      public Answer findAnswerByAskContaining(String ask);  
    }
    

    使用 mongoTemplate 助手,您可以使用 $elemMatch

    Query query = new Query();      
    query.addCriteria(Criteria.where("ask").elemMatch(Criteria.is("java is"));
    mongoTemplate.find(query, Document.class);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2015-03-10
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多