如何通过对象数组中的匹配在MongoDB中找到对象?

时间:2020-11-08 19:02:41

标签: java spring mongodb

我的文件类型如下:

{
  "_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);  
}

2 个答案:

答案 0 :(得分:0)

您只需要此查询

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

它将在ask字段中获取包含'java is'的文档。

示例here

使用Spring Boot无法测试,但可以使用@Query

类似的事情(我再说一次,未经测试):

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

答案 1 :(得分:0)

使用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);