如何使用Java中的ObjectID更新MongoDB中的文档

时间:2015-10-04 12:16:34

标签: java mongodb mongodb-query

我想在这里完成的工作非常简单。我正在尝试更新MongoDB集合中的单个文档。当我使用任何字段查找文档时,例如" name",更新查询成功。这是查询:

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

如果我尝试使用ObjectId查找文档,它将无法正常工作,因为它不匹配任何文档。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#CABBBBBB"/>
            <corners android:radius="2dp" />
        </shape>
    </item>

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="2dp"
        android:drawable="@drawable/kpop">
        <shape android:shape="rectangle">
            <solid android:color="#151B54"/>
            <corners android:radius="2dp" />
        </shape>
    </item>
</layer-list>

是否可以使此查询与对象ID一起使用?

我同意我的问题与How to query documents using "_id" field in Java mongodb driver?有点相似但是在尝试更新文档时我没有收到任何错误。它只是没有匹配任何东西。

3 个答案:

答案 0 :(得分:6)

您目前正在尝试根据字符串而不是ObjectId进行更新。

确保在构建查询时从字符串初始化新的ObjectId:

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

答案 1 :(得分:1)

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

您可以使用{“_ id”,{“$ oid”,“56110fe1f882142d842b2a63”}}作为更新查询的过滤器,如果您希望它采用字符串格式

答案 2 :(得分:-1)

将字符串转换为objectid:

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

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