Search code examples
springmongodbspring-dataspring-data-mongodb

Spring MongoDB query with or operator and text search


How can i build this MongoDB query with Spring Criteria?

{
  $or: [
    { "$text" : { "$search" : "570-11024" } },
    {"productDetails.code": "572-R110"}
  ]
}

It combines a fulltext index search with normal Where criteria with an orOperator.

Query's orOperator(Criteria... criteria) method takes only Criteria and no TextCriteria and also no CriteriaDefinition interface.


Solution

  • Yeah you are right, in spring data mongo you could do this,

    final TextCriteria textCriteria = TextCriteria.forDefaultLanguage().matchingAny("570-11024");
    final DBObject tc = textCriteria.getCriteriaObject();
    final Criteria criteria = Criteria.where("productDetails.code").is("572-R110");
    final DBObject co = criteria.getCriteriaObject();
    
    BasicDBList or = new BasicDBList();
    or.add(tc);
    or.add(co);
    
    DBObject qq = new BasicDBObject("$or", or);
    // Use MongoTemplate to execute command
    mongoTemplate.executeCommand(qq);