首页 > 解决方案 > 有没有办法只更新已发送的内容?

问题描述

这个问题与我相当新的 mongodb go 驱动程序有关。以下是我用于请求的更新参数。

update := bson.D{{"$set", bson.D{
        {"firstName", person.FirstName},
        {"lastName", person.LastName},
    }}}

persons.FindOneAndUpdate(ctx, filter, update, opts).Decode(&updatedPerson)

这样做的问题是发送省略某个字段的请求会导致该字段被删除。例如,发送像 {"firstName": "Bob"} 这样的请求将删除现有的“lastName”字段(如果有的话)。

相反,如果我完全省略字段上的 $set 运算符,则即使在请求期间未传入该字段,该字段也不会受到影响。例如,如果未传递以下更新参数,则不会删除“lastName”字段。

update := bson.D{{"$set", bson.D{{"firstName", person.FirstName}}}}

我可以指定任何选项来更改此行为吗?期望的效果是一个忽略请求中任何未指定字段并仅更新请求正文中提供的字段的函数,类似于它与 mongoose 库 ( https://mongoosejs.com/docs/api. html#model_Model.findOneAndUpdate)。

标签: mongodbgo

解决方案


推荐阅读