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

时间:2017-10-12 18:26:31

标签: java mongodb

我想做的事情很简单,但我不确定为什么它不起作用。我想要做的是在_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");
        }
    }

运行此程序并检查数据库后,它似乎无法更新。我目前在数据库中有1个文档,它没有更新。我正在使用mongo java 3.4.2驱动程序。

1 个答案:

答案 0 :(得分:1)

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

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

例如,在第二个参数中,您可能希望传递类似:

的内容
BasicDBObject updatedDocument = new BasicDBObject();
updatedDocument.append("$set", new BasicDBObject().append("longitude", longitude));

Mongo为更新提供了这些API调用:

另请参阅What's the difference between findAndModify and update in MongoDB?

相关问题