Могу ли я запросить на основе значений не в массиве? - PullRequest
1 голос
/ 08 июня 2019

У моих пользователей есть одно строковое поле, назовем его «goodsId», и у них также есть одно поле строкового массива, назовем его «seenGoods». Я надеюсь написать запрос, который получит следующую непросмотренную товарную позицию, а это означает, что наш пользователь будет просматривать товары других пользователей, и запрос проверит, есть ли их goodsId уже в массиве просматриваемых товаров нашего пользователя. Если идентификатор товара отсутствует в товарах, просмотренных пользователем, верните его.

Ex1:

Our User {
-goodsId: "3wdj9"
-viewedGoods: ["djen9", "2wk01"]
}

Queried User 1 {
-goodsId: "edij2"
-viewedGoods: ["2l1k4"]
}

Ex2:

Our User {
-goodsId: "3wdj9"
-viewedGoods: ["djen9", "2wk01"]
}

Queried User 1 {
-goodsId: "djen9"
-viewedGoods: ["2l1k4"]
}

Queried User 2 {
-goodsId: "sds33"
-viewedGoods: ["2l1k4"]
}

Пример 1: наш пользователь будет просматривать товары запрашиваемого пользователя 1 далее

Пример 2: наш пользователь уже просмотрел товары запрашиваемого пользователя 1, поэтому он просматривает следующие не просмотренные товары (запрашиваемый пользователь 2)

1 Ответ

1 голос
/ 08 июня 2019

Нет, это невозможно при одном запросе с вашей текущей структурой базы данных.Способ, которым Firestore индексирует поля, позволяет запрашивать только наличие элементов в массиве, а не их отсутствие.Если вы хотите найти какое-либо значение в списке или на карте, это значение должно присутствовать.

То, что вам нужно сделать, это сохранить список как просмотренных, так и не просмотренных элементов, а затем запросить списокэто имеет смысл для того, что вы пытаетесь сделать.Очевидно, что для больших списков это не будет масштабироваться, и вам придется искать другое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...