Google cloud firestore FieldValue.increment不是函数

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

我尝试了几个小时使用云功能更新我的应用程序中存储在cloud firestore中的用户分数,但我遇到了这个错误,我无法解决这个问题

这是我的代码:

    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”