Как можно объединить два массива документов с разными разделами и одной коллекцией? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть два раздела в одной Коллекции, и я пытаюсь взять массив позиций для некоторых заказов поставщиков, как показано в коде ниже, но он не работает:

SELECT * 
FROM p
WHERE p.partition = "Positions" and p.SupplierOrder_id in 
(SELECT value so.id from so where so.OfferId = "883ed603-69a9-4a81-a144-93957fc5a2e2" and so.partition = "SupplierOrders")

и все в порядке, если я изменю (SELECT value so.id from so where so.OfferId = "883ed603-69a9-4a81-a144-93957fc5a2e2" and so.partition = "SupplierOrders")

до

("84abab45-d60e-48b0-9e94-4420bb436196", "0be54840-bbd3-42ea-a120-949edb36a4f6")

как этот

SELECT * 
FROM p
WHERE p.partition = "Positions" and p.SupplierOrder_id in 
("84abab45-d60e-48b0-9e94-4420bb436196", "0be54840-bbd3-42ea-a120-949edb36a4f6")

Ps этот запрос, если запустить его отдельный

SELECT value so.id from so where so.OfferId = "883ed603-69a9-4a81-a144-93957fc5a2e2" and so.partition = "SupplierOrders"

return

[
    "84abab45-d60e-48b0-9e94-4420bb436196",
    "0be54840-bbd3-42ea-a120-949edb36a4f6"
]

Кто-нибудь может мне помочь с моей проблемой? PS Конечно, я понимаю, что это похоже на реляционную базу данных, и я могу решить мою проблему двумя запросами.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Похоже, что вы допустили ошибку с sql синтаксисом запроса. На самом деле, вы уже разместили свой вопрос. Вы сказали, что использовали (), он работает правильно. Но не повезло с подзапросом select value ...... Потому что оператор in следует использовать с (), а не с массивом []. Однако подзапрос выводит массив [] .

Я попробовал ниже sql, который использует метод Array_Contains, но я все еще получаю 0 строку.

SELECT p.id,p.name
FROM p
WHERE p.partition = "Positions" and 
array_contains((SELECT value p.id from p where p.OfferId = "***" and p.partition = "SupplierOrders")
,p.SupplierOrder_id,true)

После исследования официального документа , я думаю, подзапрос может ' быть реализованным с оператором Array_Contains. Так что, как обходной путь, я думаю, что вы могли бы использовать 2 sqls для достижения цели. Первый sql выводит array [] и отправляет массив во второй sql в качестве параметра.

0 голосов
/ 09 апреля 2020

Я не совсем понимаю ваш вопрос, но я могу сказать, что вы можете ограничить запрос определенными логическими разделами, указав соответствующие ключи разделов в фильтре запросов.

...