我尝试了一些代码,这很好。这与您的代码没有太大区别。
从mongo shell创建了一个文档:
MongoDB Enterprise > db.users.findOne()
{
"_id" : "5de6af7cfa42833bd9849477",
"name" : "Richard Koba",
"skills" : [ ]
}
我的 Java 代码:
// Test input documents
private Document doc1 = new Document()
.append("name", "Richard Koba")
.append("skills", Arrays.asList("jump", "dance", "sing"));
private Document doc2 = new Document()
.append("name", "Richard K")
.append("skills", Arrays.asList("sings"));
当doc1
传递给以下方法时,结果为:“### Doc FOUND”。并且,doc2
结果是“### Doc NOT found”。
private void checkDocument(Document doc) {
MongoClient mongoClient = MongoClients.create("mongodb://localhost/");
MongoDatabase database = mongoClient.getDatabase("javadb");
MongoCollection<Document> collection = database.getCollection("users");
if (collection.find(eq("name", doc.get("name"))).first() == null) {
System.out.println("### Doc NOT found");
}
else {
System.out.println("### Doc FOUND");
}
}
我也试过这个,结果相同。
Document d = collection.find(eq("name", doc.get("name"))).first();
if (d == null) { // ... }
我也试过这个;工作也很好。
if (collection.find(queryFilter).iterator().tryNext() == null) { // ... }
我认为您的代码或数据库/集合可能存在其他问题。使用新数据进行一些调试和测试可能会揭示真正的问题。
- 您是否通过mongo shell或Compass工具检查了该文档是否已存在于集合中?
- 您是否使用了正确的数据库和集合名称?
- 每次测试运行后,您是否验证数据库中的数据是否已更新/插入?
collection.find(eq("name", doc.get("name"))).first() 永远不会返回 null。
null
使用我上面发布的代码,当users
集合为空时,查找查询确实返回。