【问题标题】:MongoDB update operation not working using golang mongo-driverMongoDB更新操作无法使用golang mongo-driver
【发布时间】:2021-01-17 12:31:41
【问题描述】:

这是参考

How to remove a document inside an array in mongodb using $pull

我需要删除空子数组。我需要用 go lang 编写这个查询

db.getCollection('workflows').update({<find condition>}, {$pull: {"workflows":[]  } }   )

所以我写了下面的代码

nquery := bson.D {
    {"level", "application"},
    {"workflowName", workflowName},
    {"applicationName", applicationName},
}
nupdate := bson.M{"$pull": bson.M{"workflows":"[]"}}
UpdateOne(getContext(), nquery, nupdate)

UpdateOne 的结果显示我的查询已匹配但未修改任何内容。所以我猜nupdate有一些问题。我做错了什么?

UpdateOne 函数是 go lang 的 mongo-driver 的一部分

【问题讨论】:

    标签: mongodb go mongodb-query mongo-go


    【解决方案1】:

    "[]" 在查询中不是一个空数组,它是一个带有左方括号和右方括号的字符串

    MongoDB 空数组可以用 Go 中的空 slice“建模”,例如具有[]interface{} 类型的值,所以这种类型的composite literal[]interface{}{}

    所以用这个:

    nupdate := bson.M{"$pull": bson.M{"workflows": []interface{}{}}}
    

    【讨论】:

      【解决方案2】:

      方括号 "[]" 不应放在引号中,因为现在它们被解释为字符串 ... ,它们需要像方括号 [] 一样添加,并且在 golang 中要求: &[]int{} 是由 mongo goland 驱动程序翻译为空数组 ...

      【讨论】:

      • 试过 nupdate := bson.M{"$pull": bson.M{"workflows":[] } } ,它说语法错误:意外},期待类型去。抱歉,我是新来的,这样对吗?
      • nupdate := bson.M{"$pull": bson.M{"workflows": &[]int{} } 成功了!谢谢
      猜你喜欢
      • 2021-04-28
      • 2020-07-19
      • 2019-03-12
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多