Мой вопрос похож на Удалить объект из вложенного массива по нескольким критериям .Основное отличие состоит в том, что я хочу сначала применить arrayFilter
к массиву верхнего уровня, а затем применить еще один arrayFilter
к вложенному массиву соответствующего элемента массива верхнего уровня.
Прежде всего,вот пример документа, который я скопировал из поста с некоторыми корректировками, чтобы соответствовать моему случаю ...
{
"OtherField1" : ISODate("2016-05-06T05:09:14.589Z"),
"OtherField2" : "something",
"Distributions" : [
{
"DeliveryType" : 1,
"DeliverySubType" : 2,
"DistributionData" : [
{
"Key" : "Topic",
"Value" : "Topics",
"Children" : null
},
{
"Key" : "Message",
"Value" : "test",
"Children" : null
}
]
},
{
"DeliveryType" : 1,
"DeliverySubType" : 3,
"DistributionData" : [
{
"Key" : "Topic",
"Value" : "Topics",
"Children" : ""
},
{
"Key" : "Message",
"Value" : "test",
"Children" : null
}
]
}
]
}
То, чего я хочу добиться, это, прежде всего, найти 2-й элемент верхнегоУровень Distributions
массив путем сопоставления "DeliveryType" : 1
и "DeliverySubType" : 3
, а затем найдите 1-й элемент его вложенного массива DistributionData
, сопоставив "Key": "Topic"
и "Value" : "Topics"
, и, наконец, обновите поле Children
сопоставленного вложенного массиваelement.
Для соответствия на верхнем уровне я попробовал следующие формы ...
{
"arrayFilters": [
{ "filter1" : {
"elemMatch" : {
"DeliveryType" : 1,
"DeliverySubType" : 3,
}
}
}
}
и назвал фильтр как Distributions.$[filter1]...
, но он не работал.Или,
{
"arrayFilters": [
{ "filter1.Distributions" : {
"elemMatch" : {
"DeliveryType" : 1,
"DeliverySubType" : 3,
}
}
}
}
и ссылался на фильтр как $[filter1].Distributions....
, но снова он завершился с ошибкой синтаксического анализа.
Все примеры, которые я могу найти, касаются использования arrayFilters
навложенные массивы и я имели некоторый успех в этом отношении, но как бы я ни старался применить те же трюки к фильтрам в массиве верхнего уровня, они просто терпели неудачу со всеми видами ошибок.Может ли кто-нибудь помочь, пожалуйста?Спасибо.