java - 即使数据存在,我的 MongoDB .find() 方法也返回 null

标签 java database mongodb minecraft

我试图在数据库中查找用户的 UUID,但它无缘无故地返回 null。它在 connect() 方法中。我可以手动找到它,并在我的 javaScript 项目中找到它。但由于某种原因,我收到了此错误。

public final class DiscordLink extends JavaPlugin implements Listener {
public MongoCollection<Document> users;
public MongoDatabase mongoDatabase;
    @Override
    public void onEnable() {
        System.setProperty("DEBUG.GO", "true");
        System.setProperty("DB.TRACE", "true");
        Logger mongoLogger = Logger.getLogger("org.mongodb.driver");
        mongoLogger.setLevel(Level.WARNING);
        connect();

        getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[DiscordLink] Plugin enabled...");

        getServer().getPluginManager().registerEvents(this, this);

    }

    @Override
    public void onDisable() {
        getServer().getConsoleSender().sendMessage(ChatColor.RED + "[DiscordLink] Plugin disabled...");
    }

    public void connect() {
        MongoClient mongoClient = MongoClients.create("MONGOURI");
        MongoDatabase mongoDatabase = mongoClient.getDatabase("myFirstDatabase");
        MongoCollection<Document> users = mongoDatabase.getCollection("users");
        Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[DiscordLink] Connected to database!");
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        Document document = users.find(Filters.eq("mcUUID", player.getUniqueId().toString())).first();
        if(document != null) {
            player.kickPlayer(ChatColor.RED + "Discord Authentication Failed!");
        } else { return; }

错误:

[15:43:01 ERROR]: Could not pass event PlayerJoinEvent to DiscordLink v1.0-SNAPSHOT
java.lang.NullPointerException: Cannot invoke "com.mongodb.client.MongoCollection.find(org.bson.conversions.Bson)" because "this.users" is null

最佳答案

connect方法,您正在声明字段 MongoCollection<Document> users .

如果你的IDE配置良好,它应该告诉你这个字段没有被使用。在这里,您将创建一个本地字段(仅保留在方法范围内),而不是设置全局字段,该字段在public final class DiscordLink下面声明。 .

要修复它,请执行以下操作:

this.mongoDatabase = mongoClient.getDatabase("myFirstDatabase")
this.users = this.mongoDatabase.getCollection("users");

这里,this关键字是说您正在寻找在方法外部声明的全局变量。

关于java - 即使数据存在,我的 MongoDB .find() 方法也返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70688162/

相关文章:

mongodb - Angular 2 的 MEAN 堆栈 - 教程

node.js - 错误 : cyclic dependency detected with Mongo + Nodejs Project

java - 获取键盘用户输入

java - JCEF 的 UnsatisfiedLinkError

java - 比较 Java 中的无穷大

database - Oracle:查找主键 - PK 和 NN

php - 按平台选择和统计不同的活跃用户,并比较它们是否存在于其他表中

mysql - 关系数据库 : Variable Fields

regex - MongoDB正则表达式匹配问题

java - 仅对正值进行排序,并保留负值及其索引,因为它属于数组