Как сделать запрос к firebase на обновление данных методом FieldValue.arrayUnion
Есть запрос на изменение по полю likes в коллекции games, в firebase, где likes представляют собой массив, содержащий id пользователей
like() {
class DBwork {
constructor(FirebaseVariable) {
this.db = FirebaseVariable;
}
SetLike(game,user){
return new Promise(resolve => {
this.db.firestore().collection('games').doc(game).update({
"likes": firebase.firestore.FieldValue.arrayUnion(user)
})
});
}
}
var variable = new DBwork(firebase);
variable.SetLike(this.game, this.currentUserId).then(r =>{
console.log(r.data());
});
}
Если первым аргументом передать экземпляр игры this.game, это объект содержащий информацию по каждой игре получается ошибка:
Uncaught (in promise) FirebaseError: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: a custom Object object
Если аргументом передать строку this.game.name ничего не происходит.
Какие-то мысли приходят насчет того, что что этой записи:
return new Promise(resolve => {
не хватает этой записи
var result=""
resolve(result);
});
Но не пойму что и как правильно записать.
Ответы (1 шт):
Пример работающего запроса, хотя в firebase правила все время меняются и актуальность зависит от версии правил.
like() {
class DBwork {
constructor(FirebaseVariable) {
this.db = FirebaseVariable;
}
async SetLike(game,user){
var DocumentId = await new Promise(resolve => {
this.db.firestore().collection('games').where('name','==',game).get().then(r=>{
resolve(r.docs[0].id)
})
});
this.db.firestore().collection('games').doc(DocumentId).update({
"likes": firebase.firestore.FieldValue.arrayUnion(user),
})
}
}
var variable = new DBwork(firebase);
variable.RemoveLike(this.game.name, user)
.then(r =>{
console.log(r.data());
});
}