Я хочу удалить элемент массива многоуровневого элемента. Мои Структуры:Как сделать многоуровневое вытягивание элемента массива в 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, который является структурным массивом в структуре компании. У меня есть идентификатор компании (поле 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})
Пожалуйста, укажите ошибки, которые я здесь сделал. Благодарю.
Edit: Добавление одного примера документ для ясности вопроса
{
"_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"
}
NB: TemplateName будет уникальным внутри компании.
Является 'TemplateName' уникальным, или единственный объект 'Company' может содержать много« DocumentTemplate »с тем же именем, и если да, вы хотите вытащить каждый из них? –
@JohnSmith TemplateNames будет уникальным. Я добавил для этого подтверждение. Для Компании будет только одно имя шаблона «xyz». Пожалуйста, проверьте мои изменения в вопросе. Спасибо –