为了账号安全,请及时绑定邮箱和手机立即绑定

如何在mgo中对数组元素进行多级拉取?

如何在mgo中对数组元素进行多级拉取?

Go
holdtom 2022-01-10 17:30:55
我想做一个多级数组元素删除。我的结构如下: -type Company struct {    Id              bson.ObjectId `bson:"_id,omitempty"`    CompanyName     string    Process         []ProcessItem}type ProcessItem  struct{    SortOrder       int    Documents       []DocumentTemplate}type DocumentTemplate struct {    Id              bson.ObjectId `bson:"_id,omitempty"`    TemplateName    string}我想删除 DocumentTemplate 类型的对象。DocumentTemplate 是 ProcessItem 中的结构数组,它是 Company 结构中的结构数组。我有公司 ID(结构公司的字段)和模板名称(结构 DocumentTemplate 的字段)。我尝试了下面的 mgo pull 查询,但它不起作用。c := db.C("company")pullQuery := bson.M{"process": bson.M{"documents.templatename": "xyz"}}err := c.Update(bson.M{"_id": "123"}, bson.M{"$pull": pullQuery})请指出我在这里犯的错误。谢谢。
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您需要使用$位置运算符(https://docs.mongodb.com/manual/reference/operator/projection/positional/)。为了能够使用它,您还必须在查询中添加以下内容:


"process.documents.templatename": "xyz"

您的Update声明应如下所示:


c := db.C("company")

pullQuery := bson.M{"process.$.documents": bson.M{"templatename": "xyz"}}

err := c.Update(bson.M{"_id": "123", "process.documents.templatename": "xyz"}, bson.M{"$pull": pullQuery})



查看完整回答
反对 回复 2022-01-10
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以从 mongo 记录中的数组中提取数组中的值

 change2 := bson.M{                
     "$pull": bson.M{"sapinfo.systemstatus": bson.M{"$in": tags}},
            }


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信