Javascript 谷歌云功能中的查询过滤器不起作用
我正在为更新collectionGroup“place_users”上的“presence”属性的云功能而苦苦挣扎 我的查询不按“presence”==true筛选条目。它过去在客户端工作,但我把它切换到云功能,它不再过滤。所有文件均已退回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) =&
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;
})
});