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

标签 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 驱动程序。

最佳答案

您正在使用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?

关于java - 如何使用java更新mongodb文档中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716522/

相关文章:

java - 无法确定合适的驱动程序类别

javascript - Mongoose 数据流

java - 单击 RecyclerView 项目更改其样式

java - 我想借助 java 程序从 azure 监视器获取 Activity 、key-vault、nsg 流日志等日志,并将它们发送到 tcp/http 端点

java - Android 应用程序如何从基于 Django 的站点获取 View 并查询数据库?

java - JVM如何存储类的元信息?

node.js - Mongoose update '不能使用部分(..)来遍历元素

node.js - Mongoskin——聚合查询抛出错误,在 mongo cli 中工作正常

mongodb - 如何使用 MongoMK 在 JackRabbit Oak 中创建存储库实例

java - Spring Boot Starter-Web 在启动时尝试连接 Mongo