gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:28:36 24 4
gpt4 key购买 nike

我正在使用 mongodb java 驱动程序 3.4。

在mongodb数据库中文件按照以下结构保存:

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

为了检索具有特定 id 的文档的“priceInfo”数组,我编写了以下代码:

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 id 的文档的 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;
}

}

最佳答案

您正在对您的方法中的调用链进行操作。让我们分析链中的每个元素:

MongoCollection:

FindIterable< TDocument> find() - Finds all documents in the collection.

返回类型是 FindIterable<TDocument>然后你调用链中的下一个方法:

FindIterable< TDocument>

Methods inherited from interface com.mongodb.async.client.MongoIterable:

batchCursor, first, forEach, into, map

好的,我们去MongoIterable :

MongoIterable< TResult>:

void first(SingleResultCallback callback) - Helper to return the first item in the iterator or null.

这意味着 first(...)什么都没有返回。您正在调用 projection(...) from nothing,当然这不适用,因此编译器将其标记为错误。

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

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

关于java - 使用带投影的 find() 方法使用 mongodb java 驱动程序 3.4 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com