sql >> Database >  >> NoSQL >> MongoDB

Hoe maak ik een dynamische gelijk aan-query met behulp van Apache Camel en MongoDB?

Om te beginnen zal die bovenstaande verklaring niet compileren. In een andere vraag werd mij erop gewezen dat er een fout zit in de huidige Apache Camel MongoDB-documentatie en dat de setHeader regel hierboven zou moeten luiden:

.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))

De manier waarop ik dit uiteindelijk deed, was door een anonieme Expression . te maken :

import com.mongodb.client.model.Filters;
import com.mongodb.BasicDBObject;
import org.bson.conversions.Bson;

@Component
public class NotifyClientRoute extends RouteBuilder {
    public static final String NOTIFY_CLIENT_URI = "direct:notifyClient";

    @Override
    public void configure() throws Exception {

      from(NOTIFY_CLIENT_URI)
        .log("Determining which client gets the deletion request next for DR request '${header.drRequestId}'.")
        .setHeader(MongoDbConstants.CRITERIA, new Expression() {
            @Override
            public <T> T evaluate(Exchange exchange, Class<T> type) {
                String drRequestId = exchange.getIn().getHeader("drRequestId", String.class);

                Bson equalsClause = Filters.eq("drRequestId", drRequestId);

                // Alternatively:
                // Bson equalsClause = new BasicDBObject("drRequestId", new BasicDBObject("$eq", drRequestId));

                return exchange.getContext().getTypeConverter().convertTo(type, equalsClause);
            };
        })
        .to("mongodb:mongoClient?database=mydb&collection=mycollection&operation=findOneByQuery")
        .log("Query returned: '${body}'");
    }
}

Aanvullende opmerking:ik heb die return-instructie niet bedacht in de Expression . Ik kwam typefouten tegen en dus keek ik naar wat een andere Apache Camel Expression implementaties in de Camel-bibliotheken keerden terug en ik vond die retourclausule.




  1. 5 manieren om documenten in MongoDB in te voegen

  2. mongodb meerdere documenten invoegen of bijwerken met unieke sleutel

  3. zeilen-mongo auth fout in zeilen 0.10

  4. Mongo-query converteren naar Laravel, geneste elemMatch