Firebase Firestore不允许我通过云函数将新字符串保存到数组

3phpmpom  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(113)

我试图通过云函数在Firebase Firestore中将一个新的String值保存保存到文档中的数组中,这是源代码
注意:values.raffleId是一个String

exports.onRaffleSignupCreate = functions.firestore
.document("posts/{postId}/raffleSignups/{signupId}")
.onCreate(async (snapshot, context) => {
  const values = snapshot.data();
  console.log(values.raffleId);
  db.collection("users")
      .doc(values.userId)
      .update({"signUps": admin
          .firestore
          .FieldValue
          .arrayUnion([values.raffleId])});
});

字符串
它给了我这个错误:

onRaffleSignupCreate
Error: Element at index 0 is not a valid array element. Nested arrays are not supported. at validateArrayElement (/workspace/node_modules/@google-cloud/firestore/build/src/field-value.js:427:15) at ArrayUnionTransform.validate (/workspace/node_modules/@google-cloud/firestore/build/src/field-value.js:354:13) at /workspace/node_modules/@google-cloud/firestore/build/src/document.js:809:56 at Map.forEach (<anonymous>) at DocumentTransform.validate (/workspace/node_modules/@google-cloud/firestore/build/src/document.js:809:25) at WriteBatch.update (/workspace/node_modules/@google-cloud/firestore/build/src/write-batch.js:379:19) at DocumentReference.update (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:387:14) at /workspace/lib/index.js:14:10 at cloudFunction (/workspace/node_modules/firebase-functions/lib/cloud-functions.js:134:23) at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:199:28


有没有人遇到过这个问题,知道如何解决它?

tjrkku2a

tjrkku2a1#

正如FieldValue.arrayUnion的Admin SDK文档中所解释的那样,您应该传递元素(或元素列表)而不是Array。
因此,以下方法应该有效:

db.collection("users")
      .doc(values.userId)
      .update({"signUps": admin
          .firestore
          .FieldValue
          .arrayUnion(values.raffleId)});

字符串
值得注意的是:如果你有一个元素数组,你想传递给方法,使用spread syntax

const elemsToAdd = ['Banana', 'Apple'];

  db.collection("users")
      .doc(values.userId)
      .update({"signUps": admin
          .firestore
          .FieldValue
          .arrayUnion(...elemsToAdd)});

相关问题