Urc*_*boy 2 node.js firebase google-cloud-platform google-cloud-functions google-cloud-firestore
我正在尝试读取 firestore 文档中的单个字段,将该字段增加 1,然后沿文档中的其他两个字段更新该字段。
看来 firebase transaction update() 函数接受只有一个字段和值的 JSON 对象,因为当我向 JSON 添加其他字段时,更新失败。
这有效:
t.update(referralCodesDocRef, {field1: value1});
这不起作用:
t.update(referralCodesDocRef, {
field1: value1,
field2: value2,
field3: value3
});
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
t.update(referralCodesDocRef, {field1: value1});
t.update(referralCodesDocRef, {field2: value2});
t.update(referralCodesDocRef, {field3: value3});
Run Code Online (Sandbox Code Playgroud)
这是执行交易的函数
function runIncreaseCountTransaction(referralCodesDocRef){
return db.runTransaction(t => {
return t.get(referralCodesDocRef)
.then(doc => {
console.log(doc);
let newReferralCount = doc.data().referral_count + 1;
if(newReferralCount === max_referral_count){
const current_time_millis = Date.now();
const end_time_millis = current_time_millis+(180*1000); // ends after 3 mins
t.update(referralCodesDocRef, {referral_count: newReferralCount});
t.update(referralCodesDocRef, { timer_start_time: current_time_millis });
t.update(referralCodesDocRef, { timer_end_time: end_time_millis });
}
else{
t.update(referralCodesDocRef, { referral_count: newReferralCount });
}
return Promise.resolve(newReferralCount);
})
.then(result => {
console.log('Success: Update successful: Referral count incremented!!', result);
return true;
}).catch(err => {
console.log('Error: could not update referral count', err);
});
});
}
Run Code Online (Sandbox Code Playgroud)
那么如何通过firebase事务实现多个字段更新呢?
没有一个答案是正确的(至少对我不起作用)。
科特林
这是我的实现。好简单:
val db = Firebase.firestore
db.collection("Users")
.document("Ronaldo")
.update("famous", true,
"distance", 5)
.addOnSuccessListener {...
.addOnFailureListener {...
Run Code Online (Sandbox Code Playgroud)
所以基本上在第一对之后添加另一个逗号
使用由多个属性组成的 JavaScript 对象更新文档应该没有任何问题,例如
t.update(referralCodesDocRef, {
field1: value1,
field2: value2,
field3: value3
});
Run Code Online (Sandbox Code Playgroud)
问题很可能来自于您没有返回 Transactionupdate()方法返回的 Transaction。以下应该可以解决问题:
function runIncreaseCountTransaction(referralCodesDocRef){
return db.runTransaction(t => {
return t.get(referralCodesDocRef)
.then(doc => {
console.log(doc);
let newReferralCount = doc.data().referral_count + 1;
if (newReferralCount === max_referral_count) {
const current_time_millis = Date.now();
const end_time_millis = current_time_millis+(180*1000); // ends after 3 mins
return t.update(referralCodesDocRef,
{
referral_count: newReferralCount,
timer_start_time: current_time_millis,
timer_end_time: end_time_millis
});
} else{
return t.update(referralCodesDocRef, { referral_count: newReferralCount });
}
});
})
.then(result => {
console.log('Success: Update successful: Referral count incremented!!', result);
return null;
})
.catch(err => {
console.log('Error: could not update referral count', err);
return null; //Note the return here.
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8597 次 |
| 最近记录: |