2016-06-22 12 views
0

So habe ich eine Liste von queryObjects (eine Klasse ich in meinem Programm erstellt) von einer Mongo DB abzufragen mit Ausdrücken alle in einem Objekt wie (Pseudocode):Abfrage Mongo DB mit Hilfe von Java-Treiber

queryObject : { fild, operation, expression } 

Beispiel: queryObject : { field : "pagePath", operation:"$in", expression:"/home"}

Und der Benutzer kann so viele Abfragen erstellen, wie er/sie möchte. Dies funktioniert wie Charme, bis ich zwei Abfragen mit der gleichen Feldnamen, Beispiel haben:

queryObject1 : { field : "pagePath", operation:"$in", expression:"/home"}

queryObject2 : { field : "pagePath", operation:"$regex", expression:"(.html)$"}

als ich: query.put (queryObject1) und query.put (queryObject2) dieses Befehl:

berücksichtigt nur die zweite setzen, was mich denken ließ, dass es vielleicht die erste überschreibt. Was kann ich tun, um dies zu verhindern? Gibt es in Mongo eine Abfragesyntax, mit der ich testen kann, ob der Page Path sowohl eine Home Page ist als auch mit .html endet? Da ich weiß, dass sich diese Bedingung ändern kann, muss ich immer das Query-Objekt lesen und in meinem Programm eine MongoQuery erstellen.

Antwort

0

Unter der Annahme, dass Ihre Abfrage Objekt im Grunde eine BSON erzeugt, die für Collection.find verwendet werden können(), können Sie mehrere Bsons über die Filter-Dienstprogramme kombinieren:

Bson b1 = firstQuery.convertToDbQuery(); // or however you do it... ;-) 
Bson b2 = secondQuery.convertToDbQuery(); 
Bson combinedAsAnd = Filters.and(b1, b2); 
collection.find(combinedAsAnd).projection(...) 
+0

Ok danke ich werde es ausprobieren! ! –