Как я могу объединить два массива документов с разными разделами и одной и той же коллекцией?

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

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")

to

("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")

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

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"
]

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


person Nikita Sychou    schedule 09.04.2020    source источник
comment
я не думаю, что запрос может быть ограничен двумя разделами? существуют только кросс-секционные или односекционные запросы?   -  person 4c74356b41    schedule 09.04.2020
comment
привет, мой ответ тебе помогает?   -  person Jay Gong    schedule 15.04.2020


Ответы (2)


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

person ravi tella    schedule 09.04.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 sql для достижения цели. Первый sql выводит array [] и отправляет массив во второй sql как параметр.

person Jay Gong    schedule 13.04.2020