2017-09-23 12 views
1

mongodb tutorial for java에서 mongo collection에서 쿼리하는 방법을 찾았지만 사용하는 eq은 저에게 적합하지 않습니다! mongo와 java가있는 컬렉션에서 문서를 필터링하는 방법을 알고 있습니까?왜 mongo-java-driver에 대한 eq가 존재하지 않습니까?

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(); 

    } 

} 

내가 좋아하는 뭔가를 원하는 :

내 시도이다 컴파일러는 클래스 StackOverflow 기대 때문에

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

:

SELECT * from eqDoesntExcist WHERE name = "Troy" 

답변

2

당신은으로 거기 eqFilter을 사용할 수 있습니다 어떻게 될 것인가는 Filter class

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

에 정의를 찾고 있습니다 : 다른

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

또는 의사가 제안한 방식이 미팅에 대한 정적 가져 오기를 포함하는 방식으로 보이게합니다. Filters.eq

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

전화 HOD 더욱 당신과 같은 동일한 코드 조각을 사용

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

왜 자습서를 착각합니까? –

+0

@WW 튜토리얼은 실수가 아니며 답변을 업데이트했습니다. 이러한 형식을 사용하려면 사용중인 메소드의 정적 가져 오기를 포함시켜야합니다. 귀하의 경우에는 'Filters.eq'. – nullpointer

0

당신은이 작업을 수행 할 수 없습니다 이름이 eq 인 메소드가 필요하지 않습니다.

그래서

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

이 왜 자신의 튜토리얼 잘못이다? –

+0

그 방법은 정적이 아니며 아마도 그 클래스를 정적으로 가져 오는 것입니다. ... –