Я получил базу данных реального времени FireBase (JS SDK), где я считаю пользователей для каждого местоположения (группы / местоположение / Предметы / {locationId} / usercount).У меня также есть на корневом уровне список пользователей, где для каждого пользователя у меня есть список местоположений.В каждом из этих местоположений у меня есть счетчик, который подсчитывает общее количество пользователей для этого местоположения (пользователи / {userId} / groups / location / Items / {locationId} / usercount).
a) Поэтому всякий раз, когдаПользователь добавляется в местоположение в группах / location / Items / {locationId} / users, счетчик в groups / location / Items / {locationId} / usercount увеличивается.
b) Одновременно увеличивается счетчик в users / groups / location / Items / {locationId} / usercount для каждого пользователя, который имеет это местоположение в users / {userId} / groups / location / Items/.
Ниже вы найдете структуру данных json, а также облачную функцию, которая должна увеличивать оба счетчика (a и b).Часть (а) функции работает отлично.Что касается части (b), то она работает только для пользователя, который был только что добавлен в groups / location / Items / {locationId} / users (user yjXidCKJuYZ71TNzYe9ob5Raaub2 согласно настоящим json), но не для ВСЕХ пользователей в users / {userId}.
Мне нужна эта функция для увеличения всех счетчиков пользователей внутри пользователей / {userId}, которые имеют местоположение, к которому был добавлен пользователь.
Надеюсь, я достаточно ясен и ДЕЙСТВИТЕЛЬНО оценил бы некоторыепомочь в этом.Может быть, я не должен использовать транзакции.
Большое спасибо!
"groups" : {
"location" : {
"Items" : {
"NA" : {
"code" : "NA",
"created" : "2019-04-03--19:10:11",
"id" : "NA",
"label" : "North America",
"levelIndex" : 1,
"levelName" : "Continent",
"type" : "location",
"usercount" : 2,
"users" : {
"Xi6XiXdxDAWqvjmSUeobnhDTe4k2" : {
"created" : "2019-04-03--19:10:11",
"id" : "Xi6XiXdxDAWqvjmSUeobnhDTe4k2",
"ip" : "hidden",
"label" : "Anonymous"
},
"yjXidCKJuYZ71TNzYe9ob5Raaub2" : {
"created" : "2019-04-03--19:10:11",
"id" : "yjXidCKJuYZ71TNzYe9ob5Raaub2",
"ip" : "hidden",
"label" : "Anonymous"
}
}
}
}
}
},
"users" : {
"Xi6XiXdxDAWqvjmSUeobnhDTe4k2" : {
"created" : "2019-04-03--19:10:11",
"groups" : {
"location" : {
"Items" : {
"NA" : {
"code" : "NA",
"created" : "2019-04-03--19:10:11",
"id" : "NA",
"label" : "North America",
"levelIndex" : 1,
"levelName" : "Continent",
"type" : "location",
"usercount" : 1
}
}
}
},
"id" : "Xi6XiXdxDAWqvjmSUeobnhDTe4k2",
"ip" : "hidden",
"label" : "Anonymous"
},
"yjXidCKJuYZ71TNzYe9ob5Raaub2" : {
"created" : "2019-04-03--19:10:11",
"groups" : {
"location" : {
"Items" : {
"NA" : {
"code" : "NA",
"created" : "2019-04-03--19:10:11",
"id" : "NA",
"label" : "North America",
"levelIndex" : 1,
"levelName" : "Continent",
"type" : "location",
"usercount" : 2
}
}
}
},
"id" : "yjXidCKJuYZ71TNzYe9ob5Raaub2",
"ip" : "hidden",
"label" : "Anonymous"
}
}
}
exports.onUserAddToLocation = functions.database
.ref('/groups/location/Items/{itemId}/users/{userId}')
.onCreate((snapshot, context) => {
const itemId = context.params.itemId
const userId = context.params.userId
const groupCounterRef = admin.database().ref('/groups/location/Items/' + itemId + '/usercount');
return groupCounterRef.transaction(usercount => {
return (usercount || 0) + 1
}).then(result => {
const count = result.snapshot.val();
const userGroupsCounterRef = admin.database().ref('/users/' + userId + '/groups/location/Items/' + itemId + '/usercount');
userGroupsCounterRef.transaction(usercount => {
return count
})
})
})