【问题标题】:Why eq doesn't exist for mongo-java-driver?为什么 eq 不存在于 mongo-java-driver?
【发布时间】:2017-09-23 19:05:21
【问题描述】:

我在mongodb tutorial for java 中找到了关于如何从 mongo 集合中查询的信息,但是他们使用的 eq 对我不起作用!你知道如何使用 mongo 和 java 从集合中过滤文档吗?

这是我的尝试:

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"

【问题讨论】:

    标签: java mongodb-query mongo-java mongo-java-driver


    【解决方案1】:

    您可以在那里使用eq Filter

     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
    

    【讨论】:

    • 那么为什么他们的教程是错误的?
    • @WW 教程没有看错,已经更新了答案。要使用这种格式,您需要包含正在使用的方法的静态导入。在你的情况下Filters.eq.
    • 类型 DBCollection 中的方法 find(DBObject) 不适用于参数 (Bson) 。当我尝试执行最后一条语句时,我不断得到这个
    【解决方案2】:

    你不能这样做:

    collection.find(eq("name", "Troy"));
    

    因为编译器会在你的类 StackOverflow 中期望一个名为 eq 的方法,而这不是你需要的......

    您要查找的内容在 Filter class 中定义

    public static <TItem> Bson eq(String fieldName, Item value)
    

    可能是这样

    collection.find(Filters.eq("name", "Troy"));
    

    【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2012-05-04
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多