首页 > 解决方案 > 检查我的用户节点中是否存在特定值

问题描述

我遍历所有用户节点,我只想向在文档中将 shop 作为值的用户发送通知,如果文档中有没有此属性的用户我不想向他们发送通知

exports.rememberToOpenStore = functions.pubsub.schedule('30 09 * * *').onRun(async (context) => {
    var db = admin.firestore();
    let snap = await db.collection('user').get();
                return snap.forEach((doc) => {
                    if(doc.data().shop !== null){
                        const deviceToken = doc.data().deviceToken
                        const payload = {
                        notification: {
                            title: "Good morning ! ",
                            body: "Remember to open your store."
                        }
                    }
                    return admin.messaging().sendToDevice(deviceToken,payload)
                    }
                    return null;
            });
});

我想知道这是否

if(doc.data().shop !== null)

会知道哪个用户有或没有那个属性

有没有更好的方法来使用类似的 where 查询来做到这一点

let snap = await db.collection('user').where("shop" "!=", null).get();

只是获得在文档中具有该商店价值的用户?

谢谢 !

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我不确定shop可能具有的值,但根据文档,您可以orderBy使用一个字段,如果它不存在,它将不会被返回。因此,按字段查询 Firestore 排序shop将不会返回不包含该字段的文档。

查询应该是这样的:

db.collection('user').orderBy('shop').get()

另一种选择是为所有文档创建字段并为其分配一个null值。这样,您还可以检索具有该字段的文档。

在这种情况下,查询应该是这样的:

db.collection('user'),where('shop', '!=', null).get()

推荐阅读