2017-09-23 113 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

不是......该方法是静态的,也许他们正在静态地导入该类... –

相关问题