使用带有投影的 find() 方法使用 mongodb java driver 3.4 检索数据

2024-01-02

我正在使用 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 http://mongodb.github.io/mongo-java-driver/3.4/javadoc/?com/mongodb/client/model/Projections.html

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

它给我以下错误指示:

我不知道为什么这段代码不起作用。起初,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;     
    }

}

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

蒙戈集合:

FindIterable find() - 查找集合中的所有文档。

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

FindIterable

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

批量光标、第一个、forEach、进入、映射

好的,我们要去MongoIterable:

MongoIterable

voidfirst(SingleResultCallbackcallback) - 返回迭代器中的第一项或 null 的帮助程序。

这意味着first(...)没有返回任何内容。你正在呼唤projection(...)从无到有,当然这是不适用的,因此编译器将其标记为错误。

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

collection.find(eq("id", id)).projection(fields(include("priceInfo"), excludeId()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用带有投影的 find() 方法使用 mongodb java driver 3.4 检索数据 的相关文章

随机推荐