Results 1 to 2 of 2

Thread: Spring-Data MongoDb Performing a find with an "OR"

  1. #1
    Join Date
    Mar 2013
    Posts
    9

    Default Spring-Data MongoDb Performing a find with an "OR"

    I need some assistance as to how to find all entries in the collection which have one of two values.

    I have implemented the LogItem project from the http://pragmaticintegrator.wordpress...mongodb-setup/

    I am trying to get a list from the collection where the message is "just some text1" or "just some text2".

    Here is my code:

    Code:
    	public void executeOrQuery() {
    
    		MongoOperations mongoOps = mongoTemplate;
    
    		Criteria criteria1 = Criteria.where("message").is("just some text1");
    		Criteria criteria2 = Criteria.where("message").is("just some text2");
    
    		Query messageOrQuery = new Query(criteria1);
    		Query queries = new Query(criteria2);
    		
    		messageOrQuery.or(queries );
    
    		messageOrQuery.fields().include("_id");
    		messageOrQuery.fields().include("message");
    		List<LogItem> logItems = mongoOps.find(messageOrQuery, LogItem.class, "logItem");
    
    		for (int index = 0; index < logItems.size(); index++){
    			System.out.println(logItems.get(index).getId() + ", " + logItems.get(index).getMessage());
    		}
    	}
    However nothing is being returned in the logItems list.

    Appreciate any suggestions.

    Code:
    	public void executeOrQuery() {
    
    		int rowCount = 0;
    
    		MongoOperations mongoOps = mongoTemplate;
    		
    		Criteria criteria1 = Criteria.where("message").is("just some text1");
    		Criteria criteria2 = Criteria.where("message").is("just some text2");
    		
    		List<Query> queries = new ArrayList<Query>();
    		Query query1 = new Query(criteria1);
    		queries.add(query1);
    		
    		Query query2 = new Query(criteria2);
    		queries.add(query2);
    
    		Criteria orCriteria = new Criteria("message");
    		orCriteria.or(queries);
    		System.out.println(orCriteria.getCriteriaObject());
    		
    		Query messageOrQuery = Query.query(orCriteria);
    
    		messageOrQuery.fields().include("_id");
    		messageOrQuery.fields().include("message");
    		List<LogItem> logItems = mongoOps.find(messageOrQuery, LogItem.class, "logItem");
    		rowCount += logItems.size();
    
    		for (int index = 0; index < logItems.size(); index++){
    			System.out.println(logItems.get(index).getId() + ", " + logItems.get(index).getMessage());
    		}
    		System.out.println("Row Count: " + rowCount);
    	}
    The above code is throwing an Runtime Exception: json can't serialize type: class org.springframework.data.document.mongodb.query.Qu ery

    Any help would be appreciated! Thanks in advance.

    I have been able to get something working but I would like to have some help on the above error.

    Code:
    	public void executeOrQuery(Query ... queries) {
    
    		MongoOperations mongoOps = mongoTemplate;
    
    		Query messageOrQuery = new Query().or(queries);
    
    		System.out.println(messageOrQuery.getQueryObject());
    
    		messageOrQuery.fields().include("_id");
    		messageOrQuery.fields().include("message");
    		List<LogItem> logItems = mongoOps.find(messageOrQuery, LogItem.class, "logItem");
    
    		for (int index = 0; index < logItems.size(); index++){
    			System.out.println(logItems.get(index).getId() + ", " + logItems.get(index).getMessage());
    		}
    		System.out.println("Row Count: " + logItems.size());
    	}
    Last edited by billhm; Apr 26th, 2013 at 11:13 AM.

  2. #2
    Join Date
    Apr 2006
    Location
    Dresden, Germany
    Posts
    483

    Default

    The DBObject returned by the Query instance cannot be serialized as-is unfortunately as it rejects complex objects. To get a safe String representation of DBObjects use SerializationUtils.serializeToJsonSafely(…). In general, posting StackTraces is preferred if it comes to errors. Without them, it's just guessing and you're not likely to get any response.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •