Два дня мучения с noSQL MongoDB и прозрение

PG как отличный инструмент использования базы данных как noSQL базы

задача хранить «собранный» объект в виде JSON в базе по ключу и при необходимости извлекать из него данные

с хранением проблем нет  а вот с извлечением начинаются

MONGO — птичий язык
db.mycollection.aggregate([
{$unwind: {
path: "$object.details"
}}, {$project: {
product: {
_id : "$object.details.product.id",
code : "$object.details.product.code",
name : "$object.details.product.name",
}
}}, {$group: {
_id: {
id : "$product._id",
code : "$product.code",
name : "$product.name"
},
count: { $count: { } }
}}, {$sort: {
count: -1
}}
])

и как все логично на PG как в обычной реляционной бд


select x.product ->> 'id' as id
, x.product ->> 'code' as code
, x.product ->> 'name' as name
, sum(coalesce(x.cnt,0)) , count(distinct fo.id) cnt
from flow_object fo
JOIN LATERAL jsonb_path_query_array(fo.data, '$.object.details[*]') obj(val) ON 1 = 1
JOIN jsonb_to_recordset(obj.val) as x(product jsonb, cnt numeric, amount numeric) on 1=1
group by x.product
order by cnt desc

MongoDB vs PG MongoDB vs PG как noSQL база данных