MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या मोंगो कोडेक्स स्वचालित रूप से बनाने का कोई तरीका है?

यहां बताया गया है कि हम इसे कैसे संबोधित करते हैं (अंतिम परिणाम लोम्बोक, जैक्सन और मोंगोडीबी के बीच सुपर स्लीक है):

प्रदाता:

public class JacksonCodecProvider implements CodecProvider {
    private final ObjectMapper objectMapper;

    public JacksonCodecProvider(final ObjectMapper bsonObjectMapper) {
        this.objectMapper = bsonObjectMapper;
    }

    @Override
    public <T> Codec<T> get(final Class<T> type, final CodecRegistry registry) {

            return new JacksonCodec<>(objectMapper, registry, type);

    }
}

और कोडेक ही:

class JacksonCodec<T> implements Codec<T> {
    private final ObjectMapper objectMapper;
    private final Codec<RawBsonDocument> rawBsonDocumentCodec;
    private final Class<T> type;

    public JacksonCodec(ObjectMapper objectMapper,
                        CodecRegistry codecRegistry,
                        Class<T> type) {
        this.objectMapper = objectMapper;
        this.rawBsonDocumentCodec = codecRegistry.get(RawBsonDocument.class);
        this.type = type;
    }

    @Override
    public T decode(BsonReader reader, DecoderContext decoderContext) {
        try {

            RawBsonDocument document = rawBsonDocumentCodec.decode(reader, decoderContext);
            String json = document.toJson();
            return objectMapper.readValue(json, type);
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    @Override
    public void encode(BsonWriter writer, Object value, EncoderContext encoderContext) {
        try {

            String json = objectMapper.writeValueAsString(value);

            rawBsonDocumentCodec.encode(writer, RawBsonDocument.parse(json), encoderContext);

        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    @Override
    public Class<T> getEncoderClass() {
        return this.type;
    }
}

लोम्बोक और नवीनतम जैक्सन एनोटेशन के साथ संयुक्त होने पर, यह हमें इस तरह की चीजें करने की अनुमति देता है (शायद ही जावा कोड जैसा दिखता है, एह?):

@JsonIgnoreProperties(ignoreUnknown=true)
@JsonDeserialize(builder = Account.AccountBuilder.class)
@Builder(toBuilder=true)
@Value
public class Account {

    @JsonProperty private String _id;
    @JsonProperty private long _version;
    @JsonProperty private String organizationName;

    @JsonPOJOBuilder(withPrefix = "")
    public static final class AccountBuilder {
    }

}

फिर:

Account account = collection.find(eq("_id", id)).first();
System.out.println(account.getOrganizationName());


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या कोई नेवला कनेक्ट त्रुटि कॉलबैक है?

  2. MongoDB मानचित्र में क्वेरी फ़ंक्शन कम करें

  3. स्प्रिंग डेटा MongoDB:एकत्रीकरण ढांचा - नेस्टेड संपत्ति के साथ क्रमबद्ध करें अमान्य संदर्भ फेंकता है

  4. MongoDB क्वेरी (2dsphere) को पार्स नहीं कर सकता:दो शर्तें

  5. नेवला में वजन के साथ पूर्ण पाठ खोज