通过云函数在firestore中进行更改后从文档中检索对象数组

时间:2018-04-29 00:03:48

标签: node.js firebase google-cloud-firestore google-cloud-functions

我有一个firestore文档,其中包含一个名为items的字段,这是一个包含每个项目的对象数组。结构如下:

- Document1
              | document_status
              | items
                     | item1
                     |   | name
                     |   | item_status
                     | item2
                     |   | name
                     |   | item_status

现在我正在使用onUpdate()方法监听文档更新,该方法运行正常。例如:如果document_status发生了变化,那么我将在change.after.data()方法中获得更改。但是我需要通过 change.after.ref 来引用“项目”字段,以便我可以浏览每个项目并更改 item_status

我只想通过**更改访问文档,而不是直接访问。因为我使用通配符来检索文档引用**

我在这里看到一个接近的例子:https://github.com/firebase/functions-samples/blob/master/limit-children/functions/index.js#L27-L39但遗憾的是我无法深入了解 items 孩子的参考资料。

这是我试过的:

exports.sampleFunction = functions.firestore
        .document(‘mycollection/{documentId}/subCollection/{mydocuments}’).onUpdate((change, context) => {
        const newData = change.after.data();
        const documentStatus = newData.document_status;
         const parentRef = change.after.ref.child("items");
          return parentRef.once('value').then((snapshot) => {
            snapshot.forEach((item) => {
              updates[item.item_status] = "some_value"
            });
            return parentRef.update(updates);
          });
        }
        return;
    });

我也尝试过使用:

change.after.ref.parent.child( “项目”);

和不同的组合。但是我收到如下错误:

TypeError: change.after.ref.child is not a function
    at exports.sample_function.functions.firestore.document.onUpdate (/user_code/index.js:31:46)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
    at next (native)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
    at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
    at /var/tmp/worker/worker.js:710:26
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

请建议我如何浏览所有项目并将所有 item_status 更新为some_value

0 个答案:

没有答案