В Cloud Firestore мне нужно найти совпадения в массиве, содержащем карты, с помощью запроса array-contains
.
Я могу очень легко сопоставить прямые строки, числа и т. д., однако это всегда терпит неудачу, когда значения массива являются картой. В документации не указано, возможно это или нет.
Вот пример некоторых данных
{
data:
[
item_1: {...},
item_2: {...}
]
}
а вот пример запроса
db.collection("list")
.where("data", "array-contains", "item_1")
.get()
.then(collectionRef => {
//do something with collection
})
Я ожидаю, что содержимое массива будет соответствовать верхнему значению (item_x) карты, на данный момент оно не соответствует этому. Я предполагаю, что это связано с тем, что он хочет сопоставить все содержимое карты как «значение» элемента массива.
Любая помощь будет оценена по достоинству. Возможно, мне придется переосмыслить свою структуру данных, если это невозможно. Для контекста я использую это в облачной функции для обновления элементов (они являются ссылкой на документ) в массиве при обновлении их исходного документа.
запросы, содержащие массив, соответствуют только всему элементу массива. Если этот элемент является объектом, запрос должен предоставить весь точный объект для сопоставления для равенства в массиве.
То, что вы делаете сейчас, не поддерживается. Вам нужно будет предоставить какое-то другое поле в документе для поиска, возможно дублируя данные в этом документе, что является обычным для баз данных типа NoSQL.
См. stackoverflow.com/questions/52108304/…, stackoverflow.com/questions/52351321/…, stackoverflow.com/questions/54081799/…