come filtrare nel repository Mongo per array di oggetti

qui sto usando MongoRepository e ho bisogno di interrogare un elenco di oggetti che include alcuni id in una serie di oggetti all’interno.

la struttura del documento:

{
 "_id" : ObjectId("5ccc1c54a3d5eed9a6b8015a"),
 "email" : "sineth3@gmail.com",
 "name" : "edward3",
 "businessName" : "aroma3",
 "phone" : "07177222233",
 "address" : "no 100 NY",
 "bookletSignups" : [
    {
        "bookletId" : "sample-booklet",
        "contactName" : "john doe"
    },
    {
        "bookletId" : "sample-booklet1",
        "contactName" : "john doe1"
    }
 ],
  "eventSignups" : [
    {
        "eventId" : "sample-event",
        "contactName" : "john doe2"
    },
    {
        "eventId" : "sample-event 1",
        "contactName" : "john doe3"
    }
 ],
  "infoSignups" : [
    {
        "infoRequestId" : "sample-info ",
        "contactName" : "john doe4"
    },
    {
        "infoRequestId" : "sample-event 1",
        "contactName" : "john doe5"
    }
 ],
  "webinarSignups" : [
    {
        "webinarId" : "sample-webinar ",
        "contactName" : "john doe6"
    },
    {
        "webinarId" : "sample-webinar 1",
        "contactName" : "john doe7"
    }
 ],
 "updatedTime" : ISODate("2016-03-03T08:00:00Z")
}

il repository:

@Repository
public interface UserRepository extends MongoRepository<User,String> {

   @org.springframework.data.mongodb.repository.Query(value = "{ 'bookletSignups': { $elemMatch: { 'bookletSignups.bookletId' : ?0 } }}")
   List<User> findByBookletId(String id);

}

classe modello utente:

@Id
private String id;
private String email;
private String name;
private String businessName;
private String phone;
private String address;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date createdTime;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date updatedTime;
@Field("bookletSignups")
@DBRef
private List<BookletSignUp> bookletSignups;
@Field("eventSignups")
@DBRef
private List<EventSignUp> eventSignups;
@Field("infoSignups")
@DBRef
private List<InfoSignUp> infoSignups;
@Field("webinarSignups")
@DBRef
private List<WebinarSignUp> webinarSignups;

così im cercando di recuperare gli oggetti utente che include un oggetto bookletSignups con il passaggio del valore bookletId. ma il risultato è vuoto. che cosa è andato storto qui?

EN From: How to filter in mongo repository for array of objects

More similar articles:

1 Comment

  1. direi che è necessario modificare la query per assomigliare a questo:

    @Repository
    public interface UserRepository extends MongoRepository<User,String> {
    
       @org.springframework.data.mongodb.repository.Query(value = "{ 'bookletSignups': { $elemMatch: { 'bookletId' : ?0 } }}")
       List<User> findByBookletId(String id);
    
    }

    se si controlla la documentazione di MongoDB per $elemMatch, link alla documentazione, si può vedere che fondamentalmente in $elemMatch operatore si sta utilizzando campo in oggetto incorporato, quindi non è necessario specificare di nuovo il nome di array in cui si sta cercando oggetti.

Leave a Reply

Your email address will not be published. Required fields are marked *