sql >> データベース >  >> NoSQL >> MongoDB

Apache CamelとMongoDBを使用して動的equalsクエリを作成するにはどうすればよいですか?

    手始めに、上記のステートメントはコンパイルされません。別の質問で、現在のApache Camel MongoDBのドキュメントにエラーがあり、setHeader 上記の行は次のようになります:

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

    私がこれを行うことになった方法は、匿名のExpressionを作成することでした。 :

    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}'");
        }
    }
    

    追記:Expressionでそのreturnステートメントを思いつきませんでした 。タイプエラーが発生したので、別のApache Camel Expressionを調べました。 Camelライブラリに含まれている実装が戻ってきて、そのreturn句を見つけました。




    1. コハナでMongoDBを使用するにはどうすればよいですか?

    2. MongoDBシェルからレプリカセットにどのように接続しますか?

    3. Python-Redisサーバーが利用可能かどうかを確認する方法

    4. マングースは本番環境(Heroku)では(.populate())にデータを入力していませんが、ローカルでは機能します