Ваш сценарий использования очень прост и эффективен для работы с графической БД из-за силы взаимосвязей.
Допустим, вы используете neo4j, и у вас есть узлы Store
и Product
, соединенные OFFERS
отношения. Для каждого отдельного продукта существует один узел Product
, и к одному узлу Product
можно подключить несколько Store
. Вот пример одного отношения:
(:Store {id: 1234, name: 'My Store'})-[:OFFERS]->(:Product {id: 9999, name: "Fido Treats"})
Чтобы найти магазин, который предлагает больше всего товаров, похожих на «Мой магазин», вы можете использовать функцию агрегирования COUNT
для подсчета количества общих продуктов, ORDER BY
для сортировки в порядке убывания и LIMIT 1
для выбора результата с наибольшим количеством:
MATCH (s:Store)-[:OFFERS]->(p:Product)<-[:OFFERS]-(other:Store)
WHERE s.id = 1234
RETURN s, other, COUNT(p) AS commonCount
ORDER BY commonCount DESC
LIMIT 1