我想做的事情非常简单,但我不确定为什么它不起作用。我想做的是查询 _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 调用来进行更新:
findOneAndUpdate
- https://docs.mongodb.com/v3.2/reference/method/db.collection.findOneAndUpdate/更新
- https://docs.mongodb.com/v3.2/reference/method/db.collection.update/updateOne
- https://docs.mongodb.com/v3.2/reference/method/db.collection.updateOne/updateMany
- https://docs.mongodb.com/v3.2/reference/method/db.collection.updateMany/
另请参阅What's the difference between findAndModify and update in MongoDB?
关于java - 如何使用java更新mongodb文档中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716522/