我正在使用MongoDB 3.2和MongoDB Java Driver 3.2。为了更新文档,我使用以下代码:
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
)并且不会覆盖整个代码文档。
我的问题:
此代码是仅更新文档的特定字段还是仅覆盖整个文档?
答案 0 :(得分:1)
它只是更新指定的字段。如果该字段不存在,则将创建该字段。其他领域保持不变。根据{{3}}:
$ set运算符用指定的值替换字段的值。
和
如果该字段不存在,$ set将添加具有指定值的新字段,前提是新字段不违反类型约束。如果为不存在的字段指定虚线路径,$ set将根据需要创建嵌入文档,以实现该字段的虚线路径。