Я думаю, что SELECT * FROM c WHERE ANY(c.many.items.matchingID) = c.matchingID
должен возвращать первый и второй объект.
попробуйте это sql:
SELECT * FROM c where ARRAY_CONTAINS(c.many.items,{"matchingID":c.matchingID},true)
Вот результат:
[
{
"matchingID": 123,
"many": {
"meta": "some data",
"items": [
{
"matchingID": 921
},
{
"matchingID": 123
}
]
}
},
{
"matchingID": 1337,
"many": {
"meta": "some more data",
"items": [
{
"matchingID": 1337
},
{
"matchingID": 1337
}
]
}
}
]
Я не могу сделать это, просто используя sql. Поэтому я запрашиваю дважды.
Первый sql (получите массив matchingID
):
select value d.matchingID from (select c.matchingID,max(t.matchingID) as max,min(t.matchingID) as min from c join t in c.many.items group by c.matchingID) d where d.max = d.min and d.max = d.matchingID
Кстати, если ваш matchingID
не уникален, добавьте уникальное свойство после group by
, например group by c.matchingID,c.id
Второй sql (получить объект):
SELECT * FROM c where ARRAY_CONTAINS('first sql result',c.matchingID,true)
Надеюсь, они вам помогут.
Обновить ответ:
Вот мой тестовый udf:
function compareMatchID(matchingID,subArray){
var result = subArray.every(function(a){
return a.matchingID == matchingID;
});
return result;
}
Вот sql:
SELECT * FROM c where udf.compareMatchID(c.matchingID,c.many.items)
Этот sql стоит 4,4RU с вашим примером документа.