вот что я пытаюсь сделать с облачной функцией Firebase:
- Прослушивание изменений, которые пользователь вносит в информацию пользователя, и хранение старой и новой информации. (например, изменение изображения профиля)
- Поиск всех записей с использованием запроса группы сбора с использованием старой информации. Подколлекции содержат документ, который содержит массив информации о пользователях, рекомендовавших публикации, и загружает их.
- Замените старую информацию пользователя в загруженном массиве новой, а затем обновите документ.
Вот проблема, с которой я сталкиваюсь: хотя я могу заполнять документы и сохранять их данные, используя метод «array-contains», со старой информацией о пользователях, в то время как я пытаюсь сопоставить загруженный массив с тем же информация, это не удается. Когда я проверял с помощью метода Array.indexOf (), он возвращает -1. Это сбивает с толку, потому что я использую одну и ту же информацию для операций загрузки и сопоставления.
Что может быть не так в этом случае? Ниже код, который я использую:
//Let's say I have 'olduserinfo', which is the previous user information, and 'newuserinfo, which is the updated one.
db.collectionGroup('recommended').where('users','array-contains',olduserinfo).get()
//This one returns relevant documents without any problem.
.then((querysnapshot)=>{
querysnapshot.forEach((doc)=>{
const olddata=doc.data().users;
//Below is the part where the code fails. When I checked with Array.indexOf(), it always returns -1.
const newdata=olddata.map((item)=>{return item===olduserinfo ? newuserinfo : item;});
doc.update({users:newuserinfo});
})
})