我想做一个多级数组元素删除。我的结构如下: -
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(struct Company的字段)和TemplateName(struct 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})
请指出我在这里犯的错误。感谢。
修改 添加一个示例文档以明确问题
{
"_id" : ObjectId("573da7dddd73171e42a84045"),
"companyname" : "AAA",
"process" : [
{
"processname" : "Enquiry",
"sortorder" : 0,
"documents" : [
{
"templatename" : "xyz",
"processname" : "Enquiry"
},
{
"templatename" : "ss",
"processname" : "Enquiry"
}
]
},
{
"processname" : "Converted",
"processtype" : 1,
"sortorder" : 2,
"documents" : [
{
"templatename" : "dd",
"processname" : "Converted"
},
{
"templatename" : "fg",
"processname" : "Converted"
}
]
}
]
}
我只需要提取一条DocumentTemplete记录,如下所示:
{
"templatename" : "xyz",
"processname" : "Enquiry"
}
N.B:TemplateName在公司内部是唯一的。
答案 0 :(得分:3)
您需要使用$
位置运算符(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})
答案 1 :(得分:0)
您可以从mongo记录
中的数组中提取数组中的值 change2 := bson.M{
"$pull": bson.M{"sapinfo.systemstatus": bson.M{"$in": tags}},
}