2017-07-03 19 views
1

我使用的是mongodb java驱动程序3.4。用mongodb java驱动程序检索数据3.4使用find() - 带投影的方法

{ 
    "_id" : ObjectId("595a9fc4fe3f36402b7edf0e"), 
    "id" : "123", 
    "priceInfo" : [ 
     {object1: value1}, {object2: value2}, {object3: value3} 
    ] 
} 

为了检索与特定ID的文档“priceInfo” - 阵列,我写了下面的代码:

在MongoDB中的数据库文件是根据以下结构保存

collection.find(eq("id", id)).first().projection(fields(include("priceInfo"), excludeId())); 

我写根据太文档,你可以在这里找到这段代码:

http://mongodb.github.io/mongo-java-driver/3.4/javadoc/?com/mongodb/client/model/Projections.html

问题是我的IDE不接受此代码。

它给我下面的错误指示:

enter image description here

我不知道为什么这个代码不工作。起初IDE建议包括几个类 - 我所做的。但在此之后,我仍然收到错误指示,即您在上面看到的错误指示。

代码有什么问题?我如何检索带有ID标识的Document的priceInfo数组?

********************************更新************* *********************

根据要求,这里是整个类:

package DatabaseAccess; 

import Models.GasStation; 
import com.mongodb.MongoClient; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 
import static com.mongodb.client.model.Filters.eq; 
import static com.mongodb.client.model.Projections.excludeId; 
import static com.mongodb.client.model.Projections.fields; 
import static com.mongodb.client.model.Projections.include; 
import com.mongodb.client.model.Updates; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Date; 
import java.util.logging.Level; 
import org.bson.Document; 


public class databaseAccess { 

    private final String DB_HOST = "localhost"; 
    private final int DB_PORT = 27017; 
    private final String DB_NAME = "db1"; 
    private final String DB_COLLECTION = "prices"; 
    private final MongoClient mongoClient; 
    private final MongoDatabase database; 
    private final MongoCollection<Document> collection; 

    public databaseAccess(){ 
     mongoClient = new MongoClient(DB_HOST, DB_PORT); 
     database = mongoClient.getDatabase(DB_NAME); 
     collection = database.getCollection(DB_COLLECTION); 
    } 


    public String readFromDB(String id){ 
     collection.find(eq("id", id)).first().projection(fields(include("priceInfo"), excludeId())); 
     return null;  
    } 

} 
+0

您可以显示您的类的完整代码(与进口)。 – Spunc

+0

[如何在MongoDB Java中检索/查找嵌套数组的所有元素]的可能副本(https://stackoverflow.com/questions/41916428/how-to-retrieve-find-all-elements-of-a-nested -array-in-mongodb-java) – Veeram

+0

这不是一个重复的....这是一个数组在我的情况并不重要。我想要整个数组。我使用了与提供批准答案的代码相同的代码(除了遗留“map ...”部分之外,因为我已经提到过对从数组中检索单个项目不感兴趣)...事情是:为什么这段代码给我一个错误指示? –

回答

2

你在通话的连锁经营你的方法。 我们来分析各元素在链:

MongoCollection:

FindIterable < TDocument>找到() - 查找集合中的所有文件。

返回类型为FindIterable<TDocument>,你调用链上的下一个方法:

FindIterable < TDocument>

从接口com.mongodb.async.client.MongoIterable继承:

batchCursor,first,forEach,into,地图

好了,我们要MongoIterable

MongoIterable < TResult>:

无效第一(SingleResultCallback回调) - 助手在迭代器或空返回的第一个项目。

这意味着first(...)什么也没有返回。你从无到有调用projection(...),当然这不适用,所以编译器将此标记为错误。

对于调用projection(Bson projection)你应该有FindIterable<T>实例。 MongoCollection.find()可以为您提供此实例:

collection.find(eq("id", id)).projection(fields(include("priceInfo"), excludeId()));