为什么未定义snap.data()。id?

时间:2019-06-01 02:18:00

标签: javascript firebase google-cloud-firestore

我似乎无法获取要检索的文档的ID。

我看了很多网上的例子,它们似乎都在做我在做的事。

exports.moveToProfile = functions.firestore
  .document("tempProfiles/{id}")
  .onCreate(async (snap, context) => {
    const id = snap.data().id;
    const displayName = snap.data().displayName;

    const profile = await db
      .collection("profiles")
      .doc(id)
      .set({
        displayName: displayName,
        points: 0
      });

    return profile;
  });

2 个答案:

答案 0 :(得分:1)

在您的代码中,dataDocumentSnapshot类型的对象。从链接的API文档中可以看到,该对象代表的文档的ID是其id property。 data()会为您提供其所有字段(除非您将其作为字段写入,否则正式文档ID都不是其中之一。)因此,您可以使用data.id获得该ID。

答案 1 :(得分:0)

如果要使用通配符和参数,则可以使用context.params

请参见https://firebase.google.com/docs/functions/firestore-events#wildcards-parameters

    // Listen for changes in all documents in the 'users' collection
    exports.useWildcard = functions.firestore
        .document('users/{userId}')
        .onWrite((change, context) => {
            // If we set `/users/marie` to {name: "Marie"} then
            // context.params.userId == "marie"
            // ... and ...
            // change.after.denter code hereata() == {name: "Marie"}
        });