我想在这里完成的工作非常简单。我正在尝试更新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?有点相似但是在尝试更新文档时我没有收到任何错误。它只是没有匹配任何东西。
答案 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'), ...