Firebase的云功能:如何为所有孩子的特定子键触发数据库功能

时间:2017-10-02 01:21:01

标签: javascript firebase firebase-realtime-database google-cloud-functions

假设我的数据库如下所示:

project
└── users
    ├── safuhf8sdf76fs
    │   ├── name: 'William'
    │   └── favoriteColor: 'blue'
    ├── sffuef5srf72fd
    │   ├── name: 'Emily'
    │   └── favoriteColor: 'yellow'
    └── rfdu4ffsgf42gi
        ├── name: 'Sam'
        └── favoriteColor: 'red'

我正在尝试创建在更改/添加/删除任何favoriteColor对象的user值时触发的云功能。

我遇到问题的部分是创建对所述密钥的引用。

我知道我可以使用

收听用户的所有更改

exports.updatedFavoriteColor = functions.database.ref('/users').onWrite(event => { ... });

然后只需检查更改的数据,看它是否为favoriteColor

虽然这可行,但我更喜欢使用专门的触发器来监听所有用户对象的favoriteColor键 - 类似这样的内容:functions.database.ref('/users').child(?).child('favoriteColor')

当William或Emily的favoriteColor发生变化时,我会调用我更喜欢的函数,但是当Sam的name被更改时,则不会调用。这可能吗?

1 个答案:

答案 0 :(得分:3)

我想我更多地挖掘了它。

Firebase docs建议我可以执行以下操作:

exports.updatedFavoriteColor = functions.database.ref('/users/{pushId}/favoriteColor').onWrite(event => { ... });

这应该由任何用户favoriteColor的更改触发,其中更新的特定用户由引用中的{pushId}表示。在函数本身中,您可以使用event.params.pushId

引用用户ID