簡體   English   中英

使用find() - 使用投影方法,使用mongodb java驅動程序3.4檢索數據

[英]retrieving data with mongodb java driver 3.4 using find()-method with projection

我正在使用mongodb java驅動程序3.4。

在mongodb數據庫中,文檔按照以下結構保存:

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

為了檢索具有特定id的文檔的“priceInfo”--Array,我編寫了以下代碼:

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不接受這個代碼。

它給了我以下錯誤指示:

在此輸入圖像描述

我不知道為什么這段代碼不起作用。 起初IDE建議包括幾個類 - 我做了。 但在那之后我仍然有一個錯誤指示,即你在上面看到的那個。

代碼有什么問題? 如何檢索ID為ID的Document的priceInfo數組?

******************************** UPDATE ***************** *****************

根據要求,這是全班:

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;     
    }

}

您正在使用方法中的一系列調用進行操作。 讓我們分析鏈中的每個元素:

MongoCollection:

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

返回類型是FindIterable<TDocument>並且您在鏈中調用下一個方法:

FindIterable <TDocument>

從com.mongodb.async.client.MongoIterable接口繼承的方法:

batchCursor,first,forEach,into,map

好的,我們要去MongoIterable

MongoIterable <TResult>:

void first(SingleResultCallback callback) - Helper返回迭代器中的第一個項或null。

這意味着first(...)什么也沒有返回。 你從無到有地調用projection(...) ,當然這不適用,因此編譯器將此標記為錯誤。

對於調用projection(Bson projection)你應該有FindIterable<T>實例。 MongoCollection.find()可以為您提供此實例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM