Firebase云功能firestore阵列联合

问题描述 投票:0回答:1

我无法让阵列联合或增量在firebase云功能中正常工作。

return docRef.update({

  object: {
    count: admin.firestore.FieldValue.increment(1),
    list: admin.firestore.FieldValue.arrayUnion({
      space_id: newData.date_id,
      user: {
        displayName: "john doe"
      }
    })
  }

当函数运行时,它只是覆盖列表数组中的现有数据,并且计数总是设置为1,即使它当前存在且是数字类型。

node.js firebase google-cloud-firestore firebase-admin
1个回答
0
投票

在您发表评论之后,这里是我尝试过的HTML代码。请注意,它不是Cloud Function代码(使用Admin SDK),而是使用JavaScript SDK的一些JavaScript代码。但很可能Admin SDK具有相同的行为。

要尝试它,请执行以下操作:

  1. 在Firestore中创建一个集合testSO,并使用ID doc1和一个虚拟字段创建一个doc。
  2. 将此HTML页面保存在您的计算机上并在浏览器中打开它。
  3. 然后更改值并在浏览器中重新加载页面以试验行为

您将看到arrayUnionincrement在与arrayUnion(字段array1)的字符串数组和increment(字段count1)的数组一起使用时有效,但与复合对象无关。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>

    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-database.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-functions.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-firestore.js"></script>
      </head>

  <body>
    <script>
      // Initialize Firebase
      var config = {
        apiKey: 'xxxxxxxxxxx',
        authDomain: 'xxxxxxxxxxx',
        databaseURL: 'xxxxxxxxxxx',
        projectId: 'xxxxxxxxxxx'
      };

      firebase.initializeApp(config);

      var db = firebase.firestore();

      db.doc('testSO/doc1').update({
        count1: firebase.firestore.FieldValue.increment(1),
        array1: firebase.firestore.FieldValue.arrayUnion('arrayItem'),
        object: {
          count: firebase.firestore.FieldValue.increment(1),
          list: firebase.firestore.FieldValue.arrayUnion({
            space_id: 'spaceNbr',
            user: {
              displayName: 'john doe'
            }
          })
        }
      });
    </script>
  </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.