2017-09-23 2 views
1

J'ai trouvé dans mongodb tutorial for java sur la façon de demander à partir de la collection mongo, mais le eq qu'ils utilisent ne fonctionne pas pour moi! Savez-vous comment filtrer les documents d'une collection avec mongo et java?Pourquoi eq n'existe pas pour mongo-java-driver?

Ceci est mon essai:

package Database; 

import org.bson.Document; 

import com.mongodb.MongoClient; 
import com.mongodb.MongoClientURI; 
import com.mongodb.client.FindIterable; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 

public class StackOverflow { 

    public static void main(String[] args) { 

     // insert something to mongo: 
     final String URI = "mongodb://localhost:27017"; 
     final String DB = "StackOverflowQuestion"; 
     final String COLLECTION = "eqDoesntExcist"; 

     MongoClientURI connection = new MongoClientURI(URI); 
     MongoClient mongo = new MongoClient(connection); 
     MongoDatabase database = mongo.getDatabase(DB); 
     MongoCollection<Document> collection = database.getCollection(COLLECTION); 

     Document doc = new Document("name", "Troy").append("height", 185); 
     collection.insertOne(doc); 

     doc = new Document("name", "Ann").append("height", 175); 
     collection.insertOne(doc); 

     // read something from mongo 
     FindIterable<Document> findIt = collection.find(eq("name", "Troy")); 
     // ERROR!!! the method eq(String, String) is undefined! 

     mongo.close(); 

    } 

} 

Je veux quelque chose comme:

SELECT * from eqDoesntExcist WHERE name = "Troy" 

Répondre

2

Vous pouvez utiliser un eqFilter là aussi:

Bson bsonFilter = Filters.eq("name", "Troy"); 
FindIterable<Document> findIt = collection.find(bsonFilter); 

ou bien pour le faire paraître la façon dont suggère doc inclure une importation statique pour le met Hod appeler Filters.eq

import static com.mongodb.client.model.Filters.eq; 

et utiliser davantage le même morceau de code que le vôtre:

FindIterable<Document> findIt = collection.find(eq("name", "Troy")); // static import is the key to such syntax 
+0

Alors pourquoi leur tutoriel est-il erroné? –

+0

@WW tutoriel ne se trompe pas, ont mis à jour la réponse. Pour utiliser ce format, vous devez inclure une importation statique de la méthode utilisée. Dans votre cas 'Filters.eq'. – nullpointer

0

vous ne pouvez pas le faire:

collection.find(eq("name", "Troy")); 

parce que le compilateur s'attendra dans votre classe StackOverflow une méthode avec le nom eq et ce n'est pas ce dont vous avez besoin ..

ce que vous recherchez est défini dans le Filter class

public static <TItem> Bson eq(String fieldName, Item value) 

il peut donc être

collection.find(Filters.eq("name", "Troy")); 
+0

Alors pourquoi leur tutoriel se trompe? –

+0

Les ne sont pas .... la méthode est statique et peut-être qu'ils importent cette classe statiquement .... –