gpt4 book ai didi

mongodb - spring-data mongodb 从更新中排除字段

转载 作者:IT老高 更新时间:2023-10-28 13:23:40 25 4
gpt4 key购买 nike

如何确保可以在创建时插入特定字段,但可以选择在更新对象时排除。我本质上是在寻找类似以下的东西:

mongoOperations.save(theObject, <fields to ignore>)

据我所知,最近引入的 @ReadOnlyProperty 将忽略插入和更新的属性。

通过实现我的自定义 MongoTemplate 并覆盖其 doUpdate 方法,我能够获得所需的行为,如下所示:

@Override
protected WriteResult doUpdate(String collectionName, Query query,
Update originalUpdate, Class<?> entityClass, boolean upsert, boolean multi) {

Update updateViaSet = new Update();

DBObject dbObject = originalUpdate.getUpdateObject();
Update filteredUpdate = Update.fromDBObject(dbObject, "<fields to ignore>");

for(String key : filteredUpdate.getUpdateObject().keySet()){

Object val = filteredUpdate.getUpdateObject().get(key);

System.out.println(key + "::" + val);

updateViaSet.set(key, filteredUpdate.getUpdateObject().get(key));
}

return super
.doUpdate(collectionName, query, updateViaSet, entityClass, upsert, multi);
}

但问题是现在它将使用 Mongo $set一切的更新形式,而不仅仅是针对特定情况。请告知是否有任何更简单(和正确)的方法来实现这一点。

最佳答案

在创建更新对象时,使用 $setOnInsert 而不是 $set。它也可以在 spring mongo 中使用。

If an update operation with upsert: true results in an insert of a document, then $setOnInsert assigns the specified values to the fields in the document. If the update operation does not result in an insert, $setOnInsert does nothing.

关于mongodb - spring-data mongodb 从更新中排除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26449189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com