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

时间:2019-06-12 21:40:59

标签: java mongodb spring-data

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

编辑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操作进行更新。在我的情况下,发生的事情是update变量没有要更新的pair字段值,并且最终删除了给定id下的所有内容。

2 个答案:

答案 0 :(得分:0)

您需要为此使用$sethttps://docs.mongodb.com/manual/reference/operator/update/set/

因此,例如,如果您有一个包含user idnameage的文档,则以下内容将替换整个文档,并且您将失去年龄:

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

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

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

答案 1 :(得分:0)

我最终要做的是在获得更新注释之前过滤掉所有没有要更新的字段的呼叫。