2015-10-04 67 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。 –

相关问题