【问题标题】:My MongoDB .find() method is returning null even thought the data exists [duplicate]即使数据存在,我的 MongoDB .find() 方法也会返回 null [重复]
【发布时间】:2022-01-12 20:44:32
【问题描述】:

我试图在我的数据库中查找用户的 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

【问题讨论】:

  • 这能回答你的问题吗? Avoiding NullPointerException in Java
  • 不会在 connect 函数中声明 MongoCollection&lt;Document&gt; users 来屏蔽类属性吗?如果您以users = 开头那一行,它的行为是否相同?

标签: java database mongodb minecraft


【解决方案1】:

connect 方法中,您声明了MongoCollection&lt;Document&gt; users 字段。

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

要修复它,请这样做:

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

这里,this 关键字表示您正在寻找在方法之外声明的全局变量。

【讨论】:

  • 这是我现在遇到的错误Exception in thread "Thread-10" java.lang.NullPointerException: Cannot invoke "com.mongodb.client.MongoDatabase.getCollection(String)" because "this.mongoDatabase" is null
  • 我只是编辑我的答案。那是完全相同的问题,因此您可以将相同的建议应用于 mongoDatabase 对象
猜你喜欢
  • 2019-06-22
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多