我创建了一个简单的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不会生成未找到的类型异常......
答案 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)