2016-03-07 72 views
1

我正在使用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)的文件,而不是重写的整个文件。

我的问题:
这段代码更新只有特定领域的文档或简单的覆盖整个文档

回答

1

它只是更新指定的字段。如果该字段不存在,该字段将被创建。其他领域保持不变。根据documentation

$ set操作符用指定值替换字段的值。

如果该字段不存在,$组将添加一个新字段指定值,前提是新的领域不违反类型约束。如果为不存在的字段指定虚线路径,$ set将根据需要创建嵌入文档以实现字段的虚线路径。

相关问题