2017-09-23 109 views
1

我在mongodb tutorial for java中發現了關於如何從mongo collection中進行查詢,但eq他們使用的不適合我!你知道如何使用mongo和java過濾文檔嗎?爲什麼eq不存在mongo-java-driver?

這是我的嘗試:

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

    } 

} 

我想是這樣的:

SELECT * from eqDoesntExcist WHERE name = "Troy" 

回答

2

您可以使用eqFilter那裏:

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

要不然使其看起來像文檔建議的方式,包括會議的靜態導入霍德稱Filters.eq

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

,並進一步使用相同的代碼爲你:

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

那麼爲什麼他們的教程是錯誤的? –

+0

@WW教程沒有錯,已經更新了答案。要使用這種格式,您需要包含正在使用的方法的靜態導入。在你的情況'Filters.eq'。 – nullpointer

0

你不能做到這一點:

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

,因爲編譯器會在你StackOverflow類期待一種名爲eq的方法,這不是你所需要的。

您正在尋找在​​

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

是指什麼,所以它可能是

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

那麼,爲什麼他們的教程是錯誤的? –

+0

不是......該方法是靜態的,也許他們正在靜態地導入該類... –

相關問題