sql >> Databasteknik >  >> NoSQL >> MongoDB

Effektiv POJO-mappning till/från Java Mongo DBObject med Jackson

Du kan förmodligen använda Mixin-kommentarer för att kommentera din POJO och BasicDBObject (eller DBObject ), så anteckningar är inte ett problem. Sedan BasicDBOject är en karta kan du använda @JsonAnySetter på put-metoden.

m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);

public interface YourMixIn.class {
    @JsonAnySetter
    void put(String key, Object value);
}

Detta är allt jag kan komma på eftersom jag har noll erfarenhet av MongoDB Object.

Uppdatering: MixIn är i grunden en Jackson-mekanism för att lägga till annotering till en klass utan att ändra klassen. Detta är en perfekt passform när du inte har kontroll över klassen du vill leda (som när den är från en extern burk) eller när du inte vill belamra dina klasser med kommentarer.

I ditt fall här sa du att BasicDBObject implementerar Map gränssnitt, så att klassen har metoden put , enligt definitionen av kartgränssnittet. Genom att lägga till @JsonAnySetter till den metoden, säger du till Jackson att när han hittar en egenskap som han inte känner till efter introspektion av klassen att använda metoden för att infoga egenskapen till objektet. Nyckeln är namnet på fastigheten och värdet är, ja, värdet på fastigheten.

Allt detta tillsammans gör att den mellanliggande kartan försvinner, eftersom Jackson direkt kommer att konvertera till BasicDBOject eftersom den nu vet hur man deserialiserar den klassen från Json. Med den konfigurationen kan du göra:

DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);

Observera att jag inte har testat detta eftersom jag inte fungerar med MongoDB, så det kan finnas några lösa trådar. Jag har dock använt samma mekanism för liknande användningsfall utan problem. YMMV beroende på klasserna.



  1. Hur söker jag efter en sträng i en MongoDB-dokumentmatris och projicerar matrisvärdet i en sökoperation?

  2. Mongo db c#-drivrutin - hur går man med med id i samlingen?

  3. Hur får man värde från kapslade objekt i mongoose?

  4. Stemming fungerar inte korrekt för MongoDB textindex