2014-07-17 7 views
5

ho bisogno di inserire una nuova traccia nel documento evento esistente che segue è la mia struttura di classecome inserire documento incorporato utilizzando i dati di primavera MongoDB mongotemplate

class Event 
{ 
    String _id; 
    List<Track> tracks; 
} 

class Track 
{ 
    String _id; 
    String title; 
} 

mio documento esistente è

{ 
    "_id":"1000", 
    "event_name":"Some Name" 
} 

documento assomigliare dopo l'inserimento

{ 
    "_id":"1000", 
    "event_name":"Some name", 
    "tracks": 
    [ 
    { 
     "title":"Test titile", 
    } 

    ] 
} 

Come posso inserire quella traccia nel mio attuale do cument usando mongoTemplate spring data mongodb?

risposta

5

In primo luogo, si deve annotare Event classe con @Document:

@Document(collection = "events") 
public class Event 
{ 
    // rest of code 
} 

Il codice per l'aggiunta di un evento dovrebbe assomigliare a questo:

@Repository 
public class EventsDao { 

    @Autowired 
    MongoOperations template; 

    public void addTrack(Track t) { 
     Event e = template.findOne 
      (new Query(Criteria.where("id").is("1000")), Event.class); 

     if (e != null) { 
      e.getTracks().add(t); 
      template.save(e); 
     } 
    } 
} 

Nota: si dovrebbe cambiare Event 's classe String _id; a String id; per fare in modo che questo esempio funzioni (o modificare la query letterale).

Modificare aggiornare una traccia è anche abbastanza facile. Supponiamo che vogliate cambiare il titolo della prima traccia:

Event e = template.findOne(new Query(Criteria.where("_id").is("1000")), Event.class); 
if (e != null) { 
    e.getTracks().get(0).setTitle("when i'm 64"); 
    template.save(e); 
} 
+0

Ha funzionato! Grazie! Puoi dirmi come posso aggiornare una traccia specifica dopo l'aggiunta? –

+0

@RamzanZafar sicuro, vedere la mia modifica –

+1

non voglio andare con l'indice durante l'aggiornamento del documento secondario? c'è un modo per aggiornare parzialmente il documento secondario? sarebbe un grande aiuto –

Problemi correlati