尝试使用MongoDB Java驱动程序更新文档 非常感谢。 我只想感谢你点击这个问题!我已经尽了最大的努力使这件事尽可能彻底 但是,如果您需要进一步澄清,请随时告诉我 如果你觉得问题太长。你可以阅读第三和第四部分,然后在这里发布你自己的解决方案 安装程序 Mongodb Java驱动程序:org.Mongodb:mongo Java驱动程序:3.11.0-rc0 我想做什么 查找具有特定“名称”字段的特定文档 然后更新另一个字段或整个文档 示例文件 我现在在做什么 关于我的错误解决方案,我发现了什么 collection.find(eq(“name”,doc.get(“name”)).first()从不返回null Java只告诉我它返回一个对象。告诉我这是一个TResult,它指向MongoIterable。我被困在这里了 代码结果是最终没有插入/更新任何文档 参考文献

尝试使用MongoDB Java驱动程序更新文档 非常感谢。 我只想感谢你点击这个问题!我已经尽了最大的努力使这件事尽可能彻底 但是,如果您需要进一步澄清,请随时告诉我 如果你觉得问题太长。你可以阅读第三和第四部分,然后在这里发布你自己的解决方案 安装程序 Mongodb Java驱动程序:org.Mongodb:mongo Java驱动程序:3.11.0-rc0 我想做什么 查找具有特定“名称”字段的特定文档 然后更新另一个字段或整个文档 示例文件 我现在在做什么 关于我的错误解决方案,我发现了什么 collection.find(eq(“name”,doc.get(“name”)).first()从不返回null Java只告诉我它返回一个对象。告诉我这是一个TResult,它指向MongoIterable。我被困在这里了 代码结果是最终没有插入/更新任何文档 参考文献,java,mongodb,mongo-java-driver,mongo-collection,Java,Mongodb,Mongo Java Driver,Mongo Collection,collection.find()返回文档数组。这里实际需要的是collection.findOneAndUpdate() 从findOneAndUpdate获取t对象后,可以使用对象映射器将其映射回java对象 我尝试了一些代码,效果很好。这与您的代码没有太大区别 从mongo shell创建了一个文档: 我的Java代码: // Test input documents private Document doc1 = new Document()

collection.find()
返回文档数组。这里实际需要的是
collection.findOneAndUpdate()

  • findOneAndUpdate
    获取
    t对象后,可以使用对象映射器将其映射回java对象


  • 我尝试了一些代码,效果很好。这与您的代码没有太大区别

    从mongo shell创建了一个文档:

    我的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”

    我也试过这个,;也很好

    if (collection.find(queryFilter).iterator().tryNext() == null) { // ... }
    

    我认为您的代码或数据库/集合可能存在其他问题。使用新数据进行一些调试和测试可能会揭示真正的问题

    • 您是否检查了该文档是否已存在于mongo shell或Compass tools的集合中
    • 您是否使用了正确的数据库和集合名称
    • 每次测试运行后,是否验证数据库中的数据是否已更新/插入


    collection.find(eq(“name”,doc.get(“name”)).first()永远不会返回 空


    对于我上面发布的代码,当
    users
    集合为空时,find查询确实返回了
    null

    我想你是对的。。。看起来我在我的主课上使用了错误的方法。谢谢你的帮助!
    MongoDB Enterprise > db.users.findOne()
    {
            "_id" : "5de6af7cfa42833bd9849477",
            "name" : "Richard Koba",
            "skills" : [ ]
    }
    
    // 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"));
    
    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) { // ... }