我创建了一个云函数来在每次有新关注者时更新关注计数。但是,无论出于何种原因,
NaN
都会被写入文档,而不是递增计数。什么是 NaN
?为什么写的是它而不是适当的数字?这是我的代码:
var transaction = db.runTransaction(t => {
return t.get(countRef)
.then(doc => {
var new_count = doc.data.following_count + 1;
t.update(countRef, { following_count: new_count });
});
}).then(result => {
console.log('Transaction success!');
})
.catch(err => {
console.log('Transaction failure:', err);
});
NaN 是不是数字。正如一些评论者所说(但没有实际发布答案),这是由对非数字输入的操作引起的,例如未定义的值或字符串。
Firestore 现在支持特定的
increment(n)
操作,该操作以原子方式将您选择的常量添加到文档中的字段中。在此处阅读有关增量值的文档。
值得注意的是,这个相对较新的添加涵盖了以下开箱即用的极端情况:
NaN
、undefined
、任何其他数据类型或不存在),则会将该字段设置为请求的值。使用
increment(n)
操作将是一次重大升级,原因如下:
Firestore 对单个文档每秒可以更新的次数有限制。如果很多用户同时使用您的应用程序,您可能需要使用一些其他技术来分散写入。请参阅这些资源以获取更多信息: