如何使用Mongodb和JAVA检查文档是否存在?

时间:2015-10-07 20:40:27

标签: java mongodb

我创建了一个简单的java应用程序作为我的大学迷你项目,其中一个模块我允许用户执行插入,删除,更新,搜索等操作 出于验证目的,我希望在用户尝试删除DB中不存在的记录时向用户显示错误消息 "抱歉记录未找到"我已经尝试过try catch来检查如果mongodb抛出一个异常,如果找不到文件但是dint工作了...我对JAVA以及Mongodb全新,所以我不知道它,有人可以请帮帮我... 这是我的 deleteActionPerformed 代码以及我尝试过的代码

 private void deleteActionPerformed(java.awt.event.ActionEvent evt) {                                       
        try
        {

        DBCollection col=db.getCollection("activity"); //my collection name is activity
        if(!Tid.getText().equals(""))  //Tid is the TextField in which i am taking input of _id
        {
        col.remove(new BasicDBObject().append("_id",(Object)Tid.getText()));
        }
        else
            JOptionPane.showMessageDialog(null,"Please Enter the ID");

        }catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Record not Found "+e);
        }
    }   

try catch块dint用作java或mongodb不会生成未找到的类型异常......

2 个答案:

答案 0 :(得分:3)

这可能不是最有效的方法,但应该有效。 我从我的一些代码中调整了它,寻找特定的文档值(除了_id)。 _id可能有一种专门的方法。

/**
* Checks if an activity exists with a given id. if no such activity exists
* returns false. Returns true for one or more activities with a matching
* id.
* 
* @param db
* @param id
* @return boolean - true if one or more functions with matching names exit.
*/
public static boolean activityExists(MongoDatabase db, ObjectId id) {
    FindIterable<Document> iterable = db.getCollection("activity").find(new Document("_id", id));
    return iterable.first() != null;
}

编辑:似乎最好使用count方法。请参阅以下答案https://stackoverflow.com/a/32509268/2520767

答案 1 :(得分:0)

在您的情况下,使用find()+ limit()要快得多,因为如果文档存在,findOne()将始终读取+返回文档。 find()只返回一个游标(或不返回),只有在遍历游标时才会读取数据。

所以而不是:

db.collection.findOne({_ id:“myId”},{_ id:1})

你应该使用:

db.collection.find({_ id:“myId”},{_ id:1})。limit(1)