2015-10-04 164 views
1

我在這裏試圖完成的事情非常簡單。我正在嘗試更新MongoDB集合中的單個文檔。當我使用任何字段(如「name」)查找文檔時,更新查詢成功。下面是該查詢:如何在Java中使用ObjectID更新MongoDB中的文檔

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("name", "Morris Park Bake Shop"), 
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462")) 
); 

如果我嘗試用的ObjectId來查找文檔,它永遠不會奏效,因爲它不匹配任何文件。

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("_id", "56110fe1f882142d842b2a63"), 
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462")) 
); 

是否有可能使此查詢與對象ID一起工作?

我同意我的問題有點類似於How to query documents using "_id" field in Java mongodb driver?但是我在嘗試更新文檔時沒有收到任何錯誤。它只是不匹配任何東西。

+0

[如何在Java mongodb驅動程序中使用「\ _id」字段查詢文檔可能的重複?](http://stackoverflow.com/questions/9797935/how-to-query-documents-using-id-field-in -java-mongodb-driver) – chridam

回答

6

您當前正嘗試基於字符串進行更新,而不是ObjectId。

確保建立查詢時,從字符串初始化一個新的ObjectId:

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("_id", new ObjectId("56110fe1f882142d842b2a63")), 
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462")) 
); 
+0

我錯過了。感謝您的幫助,問題解決了! – Alexander

1

@ sheilak的回答是最好的,但是,

您可以使用{ 「_id」,{「$ OID」,‘56110fe1f882142d842b2a63’}}作爲過濾器的更新查詢,如果你希望它是在字符串格式

-1

將字符串到OBJECTID:

from bson.objectid import ObjectId 
db.collection.find_one({"_id":ObjectId('5a61bfadef860e4bf266edb2')}) 

{u'_id': ObjectId('5a61bfadef860e4bf266edb2'), ... 
+0

您能否澄清一下您在那裏做什麼?並請使用代碼格式,你應該我什至不知道如何排序這個答案 –

+0

看起來像Python。問題是關於Java。 –

相關問題