我正在使用 Golang(用于 API 定义的 Go-Swagger)和 Firestore 作为我的文档存储来构建自定义网络服务。一切正常,除了在更新数据库时变得“尴尬”。我有一个解决方案,但我不相信它是最优雅的。有没有其他人遇到过这个,他们是如何解决的....
问题陈述:当我写入数据库时,Nil 值正在覆盖 firebase 中的现有值
建议的解决方案 - 我的 API 在可选参数上有 json:"omitempty"并且将传入 nil 值(而不是获取默认的 golang 值)。我计划将 Struct 传递到 API 中,并一次将一个 attr 填充到 firestore 正在使用的我的 Struct 中。我有性能问题,但不想将我的 API 结构与我的数据库结构结合起来。我还将在我的 firestore 结构上设置 firestore:"omitempty"` 字符串文字,就像 API 结构一样。我希望这会告诉 firestore 不要写入任何 nil 值。
这是最好的方法吗?他们有其他选择吗? golang 的默认值似乎有利有弊。
更新:
我最终得到了与我提出的解决方案相似的地方,但也遵循了 Dimitry 提出的建议。我创建了一个 []firestore.Update 对象以仅包含我要更新的值。当我调用 firestore 时,它只会更新这些值。
这是我用来调用 firestore 的函数。
func updateProfileUsingUpdateMethod(documentName string, values []firestore.Update) error {
ctx := context.Background()
app := firestorehelper.GetFirestoreApp()
client, err := app.Firestore(ctx)
if err != nil {
return err
}
defer client.Close()
//Set the updated date
wr, error := client.Doc(collectionName+"/"+documentName).Update(ctx, values)
if error != nil {
return error
}
fmt.Println(wr.UpdateTime)
//Assume success
return nil
}
我还创建了一个 firestore.Update 对象并将其附加到我的 []firestore.Update slice 。
firestore.Update{Path: "PATH_TO_ATTR", Value: VALUE_TO_PASS_IN}
最佳答案
你有两个选择:
map[string]接口(interface){}使用具有 firestore 属性的自定义结构 -firestore:"FieldName,omitempty"。
_, err := client.Collection("cities").Doc("DC").Set(ctx, map[string]接口(interface){}{ “资本”:真实的, }, firestore.MergeAll) 如果错误!=无{ //以适当的方式处理任何错误,例如返回它们。 log.Printf("发生错误: %s", err)
不要将 json omitempty 与 firestore 混淆。
您还必须提供字段名称,因为此语法将使用 omitempty 作为名称。
firestore:"omitempty" - not correct
https://firebase.google.com/docs/firestore/manage-data/add-data
关于firebase - 在 Firestore 中忽略 Nil 值的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012064/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时