用 Java 更新 MongoDB 中的文档
Update document in MongoDB with Java
我正在使用 MongoDB 3.2 和 MongoDB Java 驱动程序 3.2。我想更新具有 ID 的文档的值。为此,我尝试使用以下两种方法(在 Whosebug and MongoDB Blog 中找到):
方法 #1:
for(String docID : expiredDocsIDs) {
Bson filter = Filters.eq("_id", docID);
Bson updates = Updates.set("isExpired", true);
dbCollection.findOneAndUpdate(filter, updates);
}
方法 #2:
expiredDocsIDs.stream()
.forEach(docID -> {
BasicDBObject searchQuery = new BasicDBObject("_id", docID);
BasicDBObject updateFields = new BasicDBObject();
updateFields.append("isExpired", true);
updateFields.append("fetchStatus", "FETCHED");
BasicDBObject setQuery = new BasicDBObject();
setQuery.append("$set", updateFields);
dbCollection.updateOne(searchQuery, setQuery);
});
None 这些方法都不起作用。
它遍历文档 ID 列表,执行代码,但在代码末尾,当我检查数据库中的文档时,我尝试更新的文档字段没有任何变化。
我的问题:
如何更新 MongoDB 中的特定文档?
正如 BlakesSeven 正确指出的那样,问题出在 _id
字段的转换上。原始代码将此参数作为 String
发送,而正确的方法是发送 ObjectId
类型的参数。
正确有效的代码形式 MongoDB
3.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);
});
我正在使用 MongoDB 3.2 和 MongoDB Java 驱动程序 3.2。我想更新具有 ID 的文档的值。为此,我尝试使用以下两种方法(在 Whosebug and MongoDB Blog 中找到):
方法 #1:
for(String docID : expiredDocsIDs) {
Bson filter = Filters.eq("_id", docID);
Bson updates = Updates.set("isExpired", true);
dbCollection.findOneAndUpdate(filter, updates);
}
方法 #2:
expiredDocsIDs.stream()
.forEach(docID -> {
BasicDBObject searchQuery = new BasicDBObject("_id", docID);
BasicDBObject updateFields = new BasicDBObject();
updateFields.append("isExpired", true);
updateFields.append("fetchStatus", "FETCHED");
BasicDBObject setQuery = new BasicDBObject();
setQuery.append("$set", updateFields);
dbCollection.updateOne(searchQuery, setQuery);
});
None 这些方法都不起作用。 它遍历文档 ID 列表,执行代码,但在代码末尾,当我检查数据库中的文档时,我尝试更新的文档字段没有任何变化。
我的问题:
如何更新 MongoDB 中的特定文档?
正如 BlakesSeven 正确指出的那样,问题出在 _id
字段的转换上。原始代码将此参数作为 String
发送,而正确的方法是发送 ObjectId
类型的参数。
正确有效的代码形式 MongoDB
3.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);
});