2017-10-12 54 views
0

我想要做的事情非常简单,但我不确定它为什么不起作用。我想要做的是在_id上查询数据库,如果它匹配,然后更新它找到的文档中的特定记录。如何使用java更新mongodb中文档中的特定值

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

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

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

例如,在第二个参数,您可能希望通过类似:

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

蒙戈提供更新这些API调用:

也可以参考What's the difference between findAndModify and update in MongoDB?

+0

我已经试过了,现在它更新。但是,如果最初的记录没有被添加,会怎样呢?如果findOneAndUpdate无法根据该方法的第一个参数中的约束找到它,那么它会创建该记录吗? – dfqupwndguerrillamailde

+0

我认为在这种情况下,您需要编写一些基本上说的逻辑:“如果此记录存在于数据库中,请更新它;否则,创建一个新记录并将其插入” –

相关问题