我没有像this示例中那样使用MGO包,而只是使用了here中的 Activity 存储库。
我很难阅读documentation。基本上,我有一个bson.M对象,我想替换当前对象,如果该对象不存在,则将其插入。
目前,我的代码如下:
updateFilter := bson.D{{"from_symbol", fromSymbol}, {"to_symbol", strings.ToUpper(currency["to_symbol"].(string))}}
// The above seems to be correctly finding the documents I want
// currency is my bson.M object
_, err := collection.ReplaceOne(ctx, updateFilter, currency)
// However this line will not additionally insert if the object is not found, it is replacing fine
我确定我可以手动运行另一个查询以查看文档是否存在,但这似乎是不必要的。
谢谢!
编辑:
似乎应该有一种方法可以处理
replaceOptions
和see the documentation。upsert := options.ReplaceOptions{Upsert: true}
_, err := collection.ReplaceOne(ctx, updateFilter, currency, upset)
但这给了我错误:
cannot use true (type bool) as type *bool in field value
最佳答案
使用SetUpsert
函数:
collection.ReplaceOne(ctx,filter,newDoc,options.Replace().SetUpsert(true))
关于database - 如果过滤器不返回任何内容,如何插入文档,否则用go替换mongodb中找到的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61378655/