2016-07-27 13 views
1

Könnten Sie mir bitte helfen, wie @Query in Spring Data Mongodb verwenden, um Daten mit Date zu finden?Spring Daten Mongodb Umgang mit Daten mit @Query

ich meinen Code unten zur Verfügung gestellt haben:

Repository Klasse:

public interface CustomerRepository extends MongoRepository<Customer, String> { 
    @Query("{ 'createdDateTime' : { $gt: ?0 } }") 
    List<Customer> findAllCustomersByCreatedDate(Date date); 
} 

ServiceImpl Klasse:

@Service("CustomerService") 
public class CustomerServiceImpl implements CustomerService { 
    public List<Customer> findAllCustomersByCreatedDate(String createdDate) throws ParseException { 
     return customerRepository.findAllCustomersByCreatedDate(new SimpleDateFormat("YYYY-MM-DD").parse(createdDate)); 
    } 
} 

RestController Klasse:

@RestController 
@RequestMapping("customers") 
public CustomerController { 

    @Autowired 
    private CustomerService customerService; 

    @RequestMapping(value = "/byCreatedDate", method = RequestMethod.GET, produces = { "application/json;charset=UTF-8" }) 
    public ResponseEntity<List<Customer>> findAllCustomersByCreatedDate(@RequestParam String createdDate) 
      throws BusinessException, ParseException { 

     List<Customer> customers = customerService.findAllCustomersByCreatedDate(createdDate); 
     return ResponseEntity.status(HttpStatus.OK).body(customers); 
    } 
} 

Daten innerhalb Mongo Datenbank für Kunden Sammlung:

{ "_id" : ObjectId("57851d1ee59782560e77ac3f"), 
    "_class" : "com.myproject.models.Customer", 
    "name" : "Rob", 
    "createdBy" : "John", 
    "createdDateTime" : ISODate("2016-07-12T16:38:54.439Z") 
} 

{ "_id" : ObjectId("5786222b29b42251b16b5233"), 
    "_class" : "com.myproject.models.Customer", 
    "name" : "Sara", 
    "createdBy" : "John", 
    "createdDateTime" : ISODate("2016-07-13T08:38:52.116Z") 
} 

Wenn ich die unten URL mit Datumszeichenfolge als "2016-07-19T14: 38: 54.439Z" aufrufen, es gibt noch 2 Ergebnisse (über 2 Dokumente), obwohl keine Datensätze nach 2016-07-19 in der Datenbank erstellt wurden.

http://localhost:8080/projects/byCreatedDate?createdDate=2016-07-19T14:38:54.439Z

Was ist das Problem mit meinem Code oben? Kannst du bitte helfen ?

Wie kann ich meinen obigen Code korrigieren, um Daten mit Mongodb zu behandeln?

Antwort

2

ich das Problem entdeckt haben, die das falsche Datumsformat ist und wie unter den ServiceImpl Klassencode geändert, jetzt die Dokumente abgerufen werden, wie erwartet:

Rückkehr customerRepository.findAllCustomersByCreatedDate (neu Simple ("yyyy-MM- dd'T'HH: mm: ss.SSS'Z '". parse (createdDate));

0

Eine andere Art und Weise -

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd"); 
LocalDate localDate = dtf.parseLocalDate(createdDate);  
Date dt = Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.UTC)); 
return customerRepository.findAllCustomersByCreatedDate(dt);