2014-06-22 5 views
4

J'essaie d'interroger une collection en utilisant des opérandes ET ensemble. J'ai la version shell travail:Comment trouver des documents correspondant à plusieurs critères

db.widgets.find({color: 'black, shape: 'round', weight: 100}) 

Je suis incapable de trouver l'équivalent Java (en utilisant le native driver). J'ai essayé plusieurs choses, mais voici ma dernière tentative:

// Find all black, round widgets with weight 100 
List<BasicDBObject> criteria = new ArrayList<BasicDBObject>(); 
criteria.add(new BasicDBObject("color", "black")); 
criteria.add(new BasicDBObject("shape", "round")); 
criteria.add(new BasicDBObject("weight", 100)); 

DBCursor cur = widgets.find(new BasicDBObject("$and", criteria)); 

// Get all matching widgets and put them into a list 
List<Widget> widgetList = new ArrayList<Widget>(); 
DBCursor cur = widgets.find(andQuery); 
while (cur.hasNext()) { 
    widgetList.add(new Widget(cur.next())); 
} 

if (widgetList.isEmpty()) 
    System.out.println("No results found"); 

Des idées quel est le problème?

Répondre

4
BasicDBObject criteria = BasicDBObject(); 
criteria.append("color", "black"); 
criteria.append("shape", "round"); 
criteria.append("weight", 100); 

DBCursor cur = widgets.find(criteria); 
+0

Merci ... fonctionne parfaitement! –

1

Une autre façon de résoudre même problème consiste à utiliser l'agrégation:

// To print results 
    Block<Document> printBlock = new Block<Document>() { 
     @Override 
     public void apply(final Document document) { 
      System.out.println(document.toJson()); 
     } 
    };  

// get db connection and collection 
MongoDatabase db= mongoClient.getDatabase("dbname"); 
    MongoCollection<Document> collection= database.getCollection("collectionname"); 

collection.aggregate(Arrays.asList(Aggregates.match(Filters.eq("key1", "value1")), 
      Aggregates.match(Filters.eq("key2", "value2")), 
      Aggregates.match(Filters.eq("key3", "value3")))).forEach(printBlock); 

Pour plus de détails s'il vous plaît consulter le v 3.4 mongo documentation d'agrégation.

http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/aggregation/

Questions connexes