猿问

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

我想做一个多级数组元素删除。我的结构如下: -


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})

请指出我在这里犯的错误。谢谢。


holdtom
浏览 138回答 2
2回答

慕哥9229398

您需要使用$位置运算符(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})

SMILET

您可以从 mongo 记录中的数组中提取数组中的值 change2 := bson.M{                      "$pull": bson.M{"sapinfo.systemstatus": bson.M{"$in": tags}},             }
随时随地看视频慕课网APP

相关分类

Go
我要回答