2017-10-12 73 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

我認爲在這種情況下,您需要編寫一些基本上說的邏輯:「如果此記錄存在於數據庫中,請更新它;否則,創建一個新記錄並將其插入」 –

相關問題