Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌云功能中的查询过滤器不起作用_Javascript_Node.js_Firebase_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Javascript 谷歌云功能中的查询过滤器不起作用

Javascript 谷歌云功能中的查询过滤器不起作用,javascript,node.js,firebase,google-cloud-firestore,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在为更新collectionGroup“place_users”上的“presence”属性的云功能而苦苦挣扎 我的查询不按“presence”==true筛选条目。它过去在客户端工作,但我把它切换到云功能,它不再过滤。所有文件均已退回 exports.updatePoiPresence = functions.https.onCall((data: any, context: any) => { return new Promise((resolve, reject) =&

我正在为更新collectionGroup“place_users”上的“presence”属性的云功能而苦苦挣扎

我的查询不按“presence”==true筛选条目。它过去在客户端工作,但我把它切换到云功能,它不再过滤。所有文件均已退回

exports.updatePoiPresence = functions.https.onCall((data: any, context: any) => {

    return new Promise((resolve, reject) => {

        return store.collectionGroup("place_users",
                (ref: any) => ref
                .where("user_id", "==", context.auth.uid)
                .where("day_stamp", "<", data.start_of_day / 1000)
                .where("presence", "==", true))
            .get()
            .then(
                (q_snapshot: any) => {

                    return q_snapshot.forEach((snapshot: any) => {
                        functions.logger.log("no docs value data fct:", snapshot.data())


                        snapshot.ref.update({
                                presence: false
                            })
                            .then((a: any) => {
                                resolve("ok");
                            })
                            .catch((error: any) => {
                                functions.logger.log("error survenue", error);
                                reject("Rejet pas identifie")
                            })
                    });


                })
    });
});
exports.updatePaipPresence=functions.https.onCall((数据:任意,上下文:任意)=>{
返回新承诺((解决、拒绝)=>{
return store.collectionGroup(“place_用户”,
(参考:任何)=>参考
.where(“user_id”,“==”,context.auth.uid)

。其中(“day_stamp”,“您似乎无法正确地查询数据库:

    return store.collectionGroup("place_users",
        (ref: any) => ref
            .where("user_id", "==", context.auth.uid)
            .where("day_stamp", "<", data.start_of_day / 1000)
            .where("presence", "==", true))
        .get()

此外,请注意Firebase异步方法返回承诺。您不需要将代码包装在
return new Promise();

下面的内容应该可以做到这一点

const store = admin.firestore();

exports.updatePoiPresence = functions.https.onCall((data: any, context: any) => {

    return store.collectionGroup("place_users")
        .where("user_id", "==", context.auth.uid)
        .where("day_stamp", "<", data.start_of_day / 1000)
        .where("presence", "==", true)
        .get()
        .then((q_snapshot: any) => {
            const promises = [];
            q_snapshot.forEach((snapshot: any) => {
                functions.logger.log("no docs value data fct:", snapshot.data())
                promises.push(snapshot.ref.update({ presence: false }));
            });
            return Promise.all(promises);
        })
        .catch((error: any) => {
            functions.logger.log("error survenue", error);
            return null;
        })

});
const store=admin.firestore();
exports.updatePaipPresence=functions.https.onCall((数据:任意,上下文:任意)=>{
return store.collectionGroup(“place\u用户”)
.where(“user_id”,“==”,context.auth.uid)

.where(“日戳”,“无单据价值数据fct”记录在哪里我们可以在您的屏幕截图中看到的字符串?您好@RenaudTarnec,我刚刚编辑了我的帖子。看起来您试图将代码从Angular移植到运行云函数的后端代码中。这是行不通的,因为SDK有不同的语法。此外,无需在此处创建新的承诺。所有API都已经处理了承诺-只需使用您正在使用的承诺即可由API提供。谢谢,这一切都很好,除了双返回语句外,第一个返回q_快照应该被删除,只有返回承诺。所有都应该存在。我不禁想知道第二个参数为回调函数的collectionGroup方法来自何方,因为我实际上在不同的位置看到了它:例如盖伊使用了相同的语法:
const store = admin.firestore();

exports.updatePoiPresence = functions.https.onCall((data: any, context: any) => {

    return store.collectionGroup("place_users")
        .where("user_id", "==", context.auth.uid)
        .where("day_stamp", "<", data.start_of_day / 1000)
        .where("presence", "==", true)
        .get()
        .then((q_snapshot: any) => {
            const promises = [];
            q_snapshot.forEach((snapshot: any) => {
                functions.logger.log("no docs value data fct:", snapshot.data())
                promises.push(snapshot.ref.update({ presence: false }));
            });
            return Promise.all(promises);
        })
        .catch((error: any) => {
            functions.logger.log("error survenue", error);
            return null;
        })

});