如何使用java在mongodb中更新文档中的特定值

如何使用java在mongodb中更新文档中的特定值,java,mongodb,Java,Mongodb,我想做的很简单,但我不知道为什么它不起作用。我试图做的是在_id上查询数据库,如果匹配,则更新找到的文档中的特定记录 BasicDBObject basic = new BasicDBObject(); basic.put("_id", id); FindIterable<Document> cursor = collection.find(basic); if(cursor == null){ Document tableEntry = ne

我想做的很简单,但我不知道为什么它不起作用。我试图做的是在_id上查询数据库,如果匹配,则更新找到的文档中的特定记录

BasicDBObject basic = new BasicDBObject();
    basic.put("_id", id);
    FindIterable<Document> cursor = collection.find(basic);
    if(cursor == null){
        Document tableEntry = new Document();
        tableEntry.put("_id", id);
        tableEntry.put("longitude", longitude);
        tableEntry.put("latitude", latitude);
        tableEntry.put("status", status);

        collection.insertOne(tableEntry);
        closeConnection();
    }else{
        for(Document doc : cursor){
            doc.put("status", "full");
        }
    }
运行此操作并检查数据库后,它似乎没有更新。我目前在数据库中有一个文档,它不会更新它。我使用的是mongo java 3.4.2驱动程序

您正在使用insertOne,它将插入一个新文档。您需要使用更新现有文档的命令,例如findOneAndUpdate

如果使用findOneAndUpdate之类的命令,请注意它需要两个参数。第一个是唯一标识要更新的文档的查询。第二个是告诉如何更新文档的对象

例如,在第二个参数中,您可能希望传递如下内容:

BasicDBObject updatedDocument = new BasicDBObject();
updatedDocument.append("$set", new BasicDBObject().append("longitude", longitude));
Mongo为更新提供以下API调用:

findOneAndUpdate- 更新- 更新日期- 更新名称-
另请参阅

我已经尝试过了,现在它更新了。但是,如果没有添加初始记录,该怎么办。。如果findOneAndUpdate无法根据该方法第一个参数中的约束进行查找,它会创建该记录吗?我认为在这种情况下,您需要编写一些逻辑,本质上说:如果数据库中存在该记录,请更新它;否则,创建一个新记录并插入它