使用Java更新MongoDB中的特定字段而不是整个文档
问题描述:
我正在使用MongoDB
3.2和MongoDB Java Driver
3.2。为了更新我用下面的代码文件:使用Java更新MongoDB中的特定字段而不是整个文档
unfetchedEpisodes.stream()
.forEach(ep -> {
BasicDBObject updatedFields = new BasicDBObject();
updatedFields.append("fetchStatus", "IN_PROCESS");
updateColFields(updatedFields, dbCollection, new ObjectId(ep.get("_id").toString()));
});
public void updateColFields(BasicDBObject updatedFields, MongoCollection<Document> dbCollection, ObjectId docID) {
BasicDBObject setQuery = new BasicDBObject();
setQuery.append("$set", updatedFields);
BasicDBObject searchQuery = new BasicDBObject("_id", docID);
dbCollection.updateOne(searchQuery, setQuery);
}
此代码的工作,但我不知道,这个代码更新只有特定的领域(如fetchStatus
)的文件,而不是重写的整个文件。
我的问题:
这段代码更新只有特定领域的文档或简单的覆盖整个文档?
答
它只是更新指定的字段。如果该字段不存在,该字段将被创建。其他领域保持不变。根据documentation:
$ set操作符用指定值替换字段的值。
和
如果该字段不存在,$组将添加一个新字段指定值,前提是新的领域不违反类型约束。如果为不存在的字段指定虚线路径,$ set将根据需要创建嵌入文档以实现字段的虚线路径。