Google cloud firestore FieldValue.increment不是函数
我尝试了几个小时使用云功能更新我的应用程序中存储在cloud firestore中的用户分数,但我遇到了这个错误,我无法解决这个问题 这是我的代码:Google cloud firestore FieldValue.increment不是函数,google-cloud-firestore,google-cloud-functions,Google Cloud Firestore,Google Cloud Functions,我尝试了几个小时使用云功能更新我的应用程序中存储在cloud firestore中的用户分数,但我遇到了这个错误,我无法解决这个问题 这是我的代码: const auth = require('firebase/auth'); const functions = require('firebase-functions'); const nodemailer = require('nodemailer'); const FieldValue = require('f
const auth = require('firebase/auth');
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const FieldValue = require('firebase-admin').firestore.FieldValue;
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.addPoints = functions.firestore
.document(`users/{user}`)
.onCreate(async (snap, context) => {
const invitingFriendId = snap.data().invitingFriendId;
const invitingFriendRef = db.collection('users').doc(invitingFriendId);
return invitingFriendRef.update("points", db.FieldValue.increment(50));
});
看起来您正在尝试使用functions SDK查询云Firestore。那根本行不通。函数SDK仅用于声明函数触发器。您需要使用Firebase Admin SDK在函数触发时实际进行查询 以最简单的方式要求firebase管理员:
const admin = require('firebase-admin');
然后使用它进行查询:
admin.firestore().documet("...").update(...);
FieldValue increment可以这样引用:
admin.firestore.FieldValue.increment()
看起来您正在尝试使用functions SDK查询云Firestore。那根本行不通。函数SDK仅用于声明函数触发器。您需要使用Firebase Admin SDK在函数触发时实际进行查询 以最简单的方式要求firebase管理员:
const admin = require('firebase-admin');
然后使用它进行查询:
admin.firestore().documet("...").update(...);
FieldValue increment可以这样引用:
admin.firestore.FieldValue.increment()
我看到了相同的错误消息,然后在将Firebase函数更新到最新版本后,设法使其与Firebase函数一起工作
npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools
我看到了相同的错误消息,然后在将Firebase函数更新到最新版本后,设法使其与Firebase函数一起工作
npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools
我也在为CloudCode写作。最好理解firestore变量不一定指向同一事物,因为它们只是名称 A.此处的firestore用于访问firestore数据库并设置数据。但是,此firestore不包含字段值:
// The Firebase Admin SDK
const admin = require('firebase-admin')
admin.initializeApp()
//const firestore db, comes after initialize app
const firestore = admin.firestore()
B.相反,FieldValue不包含在上面的firestore admin.firestore中,而是包含在firestore对象中:
const FieldValue = require('firebase-admin').firestore.FieldValue
C.因此,完成上述内容后,您现在可以使用我们拥有的两个不同的firestore变量,代码B用于获取FieldValue,代码A用于更新数据库
// Cloud Functions and setup triggers.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
//const firestore, comes after initialize app
const firestore = admin.firestore()
const FieldValue = admin.firestore.FieldValue
exports.createdLikesTrigger = functions.firestore
.document(`likes/{uid}/posts-liked/{postId}`)
.onCreate(async (snap, context) => {
const uid = context.params.uid
const postId = context.params.postId
const likeDocument = snap.data()
const date = likeDocument.when
const authorUid = likeDocument.author
try{
//increment post count
const increment = FieldValue.increment(1);
await firestore.collection('posts').doc(postId).update({likes: increment})
catch(e){
console.log("Error in incrementing likes: ", e)
}
})
我也在为CloudCode写作。最好理解firestore变量不一定指向同一事物,因为它们只是名称 A.此处的firestore用于访问firestore数据库并设置数据。但是,此firestore不包含字段值:
// The Firebase Admin SDK
const admin = require('firebase-admin')
admin.initializeApp()
//const firestore db, comes after initialize app
const firestore = admin.firestore()
B.相反,FieldValue不包含在上面的firestore admin.firestore中,而是包含在firestore对象中:
const FieldValue = require('firebase-admin').firestore.FieldValue
C.因此,完成上述内容后,您现在可以使用我们拥有的两个不同的firestore变量,代码B用于获取FieldValue,代码A用于更新数据库
// Cloud Functions and setup triggers.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
//const firestore, comes after initialize app
const firestore = admin.firestore()
const FieldValue = admin.firestore.FieldValue
exports.createdLikesTrigger = functions.firestore
.document(`likes/{uid}/posts-liked/{postId}`)
.onCreate(async (snap, context) => {
const uid = context.params.uid
const postId = context.params.postId
const likeDocument = snap.data()
const date = likeDocument.when
const authorUid = likeDocument.author
try{
//increment post count
const increment = FieldValue.increment(1);
await firestore.collection('posts').doc(postId).update({likes: increment})
catch(e){
console.log("Error in incrementing likes: ", e)
}
})
我在更新firebase函数中的文档时尝试调用decrement时遇到了相同的问题。 然后我看到了这两个API文档 与firebase.firestore.FieldValue不同,管理版本没有递增/递减方法。不知道为什么会这样。
因此,我首先使用get读取值,然后使用更新进行减法运算。我在更新firebase函数中的文档时尝试调用减量时遇到了相同的问题。 然后我看到了这两个API文档 与firebase.firestore.FieldValue不同,管理版本没有递增/递减方法。不知道为什么会这样。
因此,我首先使用get读取值,然后使用更新进行减法。如果出现错误,重要的是将其文本复制到问题中,以便我们都能看到出了什么问题。如果出现错误,重要的是把它的文本复制到问题中,这样我们都能看到哪里出了问题。我得到了这个错误db.collection…文档不是一个函数。我已经更新了问题中的代码我已经解决了问题,但我现在遇到了以下错误类型错误:无法读取未定义的属性“increment”您可以显示为获得此新错误所做的更改吗?我一直在使用它进行测试,并复制它,效果很好。仅供参考,上面第二个代码块中的小错误:“document”应该是“document”,我收到了这个错误db.collection…document不是一个函数。我已经更新了问题中的代码我已经解决了问题,但我现在遇到了以下错误类型错误:无法读取未定义的属性“increment”您可以显示为获得此新错误所做的更改吗?我一直在使用它进行测试,并复制它,效果很好。仅供参考,上面第二个代码块中的小错误:“document”应该是“document”