使用 Java 更新 MongoDB 中的文档

Mik*_* B. 4 java crud mongodb mongodb-query

我正在使用 MongoDB 3.2 和 MongoDB Java 驱动程序 3.2。我想更新具有 ID 的文档的值。为了做到这一点,我尝试使用以下两种方法(在StackoverflowMongoDB 博客中找到):

方法#1:

for(String docID : expiredDocsIDs) {

    Bson filter = Filters.eq("_id", docID);

    Bson updates = Updates.set("isExpired", true);

    dbCollection.findOneAndUpdate(filter, updates);
}
Run Code Online (Sandbox Code Playgroud)

方法#2:

expiredDocsIDs.stream()
    .forEach(docID -> {

        BasicDBObject updateFields = new BasicDBObject();
        updateFields.append("isExpired", true);
        updateFields.append("fetchStatus", "FETCHED");

        BasicDBObject setQuery = new BasicDBObject();
        setQuery.append("$set", updateFields);

        BasicDBObject searchQuery = new BasicDBObject("_id", docID);

        dbCollection.updateOne(searchQuery, setQuery);
});
Run Code Online (Sandbox Code Playgroud)

这些方法都行不通。它迭代文档 ID 列表,执行代码,但在代码末尾,当我检查数据库中的文档时,我尝试更新的文档字段没有任何更改。

如何更新 MongoDB 中的特定文档?

Mik*_* B. 5

正如BlakesSeven正确指出的那样,问题出_id在场的铸造上。原始代码发送此参数为 as String,而正确的方法是发送 type 的参数ObjectId

正确且有效的代码形式MongoDB3.2:

this.trackedEpisodesReg.entrySet().stream()
    .filter(ep -> ep.getValue().isExpired())
    .forEach(ep -> {

        BasicDBObject updateFields = new BasicDBObject();
        updateFields.append("isExpired", true);

        BasicDBObject setQuery = new BasicDBObject();
        setQuery.append("$set", updateFields);

        BasicDBObject searchQuery = new BasicDBObject("_id", new ObjectId(ep.getValue().getEpisodeID()));

        dbCollection.updateOne(searchQuery, setQuery);
    });
Run Code Online (Sandbox Code Playgroud)