gpt4 book ai didi

java - MongoOperations - upsert/findAndModify 删除 mongo 中的所有字段

转载 作者:行者123 更新时间:2023-12-02 04:32:43 26 4
gpt4 key购买 nike

我正在尝试使用 MongoOperarions,并且 upsert 方法仅更新/创建更新参数中存在的那些字段。但是,每当我发送要更新的空字段列表时,它都会删除数据库中的所有其他字段,成为唯一剩下的“I d”字段你们知道有什么方法可以避免这样做吗?理想情况下,我希望它只是告诉我什么也没做,而不是删除所有内容。

编辑 1

这就是我的代码:

Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
final Update update = new Update();
fields.entrySet().stream()
.forEach(entry->{
if(entry.getValue()!=null)
update.set(entry.getKey(),entry.getValue());
});

return mongoOperation.findAndModify(query,update,Destination.class);

如您所见,我使用 $set 操作进行更新。在我的场景中,更新变量没有要更新的字段值对,最终会删除给定 id 下的所有内容。

最佳答案

您需要使用$set来实现:https://docs.mongodb.com/manual/reference/operator/update/set/

因此,如果您有一个包含 user idnameage 的文档,那么以下内容将替换整个文档,你会失去年龄:

{
id: 1,
name: 'new name'
}

但是使用 $set 将仅更新或添加查询中的字段,因此年龄字段不会丢失

{
'$set': {
id: 1,
name: 'new name'
}
}

关于java - MongoOperations - upsert/findAndModify 删除 mongo 中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570727/

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