Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Firebase云函数可以循环数组并删除链接数据吗?_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Firebase云函数可以循环数组并删除链接数据吗?

Firebase云函数可以循环数组并删除链接数据吗?,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,目前,我有两个孩子与Firebase、对话和帖子有关 { “对话”:{ “-LFzccEzciNPSTFAZAhb”:{ “49C91D37EE1C4B3E07FE24FEBE9ED72B”:“正确”, “CAD54A563CAB99107D9BBDB7F2234FA3”:“正确”, “日期”:“2018-06-27 05:06:12+0000”, “车队”:“-LFzccEzciNPSTFAZAhb”, “创建时间”:1.5300759725991712E9, “最后一条信息”:“lessee

目前,我有两个孩子与Firebase、对话和帖子有关

{
“对话”:{
“-LFzccEzciNPSTFAZAhb”:{
“49C91D37EE1C4B3E07FE24FEBE9ED72B”:“正确”,
“CAD54A563CAB99107D9BBDB7F2234FA3”:“正确”,
“日期”:“2018-06-27 05:06:12+0000”,
“车队”:“-LFzccEzciNPSTFAZAhb”,
“创建时间”:1.5300759725991712E9,
“最后一条信息”:“lesseee”,
“最后消息时间”:1530077715525,
“posted”:“-LFzT4c6ylIcPne9F7QS”,
“状态”:“已发送”,
“删除时间”:1530159609351
},
“-LFzd4rx4hCKtdls2yyF”:{
“49C91D37EE1C4B3E07FE24FEBE9ED72B”:“正确”,
“CAD54A563CAB99107D9BBDB7F2234FA3”:“正确”,
“日期”:“2018-06-27 05:08:13+0000”,
“convalid”:“-LFzd4rx4hCKtdls2yyF”,
“创建时间”:1.530076093932972E9,
“最后一条信息”:“感觉糟透了”,
“最后消息时间”:1530077516414,
“postID”:“-LFzd-uN4kRfU18TBj0N”,
“状态”:“已发送”,
“删除时间”:1530162473644
}
},
及职位:

“posts”:{
“-LFzT4c6ylIcPne9F7QS”:{
“透露”:“假”,
“发布日期”:“2018-06-27 04:20:09+0000”,
“帖子”:“嘿,孩子们”,
“海报”:“49C91D37EE1C4B3E07FE24FEBE9ED72B”,
“revealedDate”:1530073209351,
"启示":一,,
“所需收入”:13,
“删除时间”:1530159609351,
“监视者”:{
“3ASP4M5mkTPGPO1qQhfVKXsr6Qf2”:“假”,
“AGdUYuWFJ9dC4VcPKeQJoMOM1xe2”:“假”,
“Hsm2R97Y1VZbhXHNrRvHuTKSrYv1”:“假”,
“Ih5m9VUnJnewKvqiZCVgBFwCFrz1”:“假”,
“N0IjBvmj9ieAKoBGpSJIitN6xmI3”:“假”,
“NMo1gUPKWFcdhsrnCbKte7JfrcA2”:“假”,
“NUAF78SAM4OIASLIVTLD4GHWNP1”:“假”,
“OclP0yKT9ig6TtifF2ik1yh2TRr2”:“假”,
“XyF2qaRasbfNfwo6KM6ZClrsud42”:“假”,
“BC7GJBUE0xWIMAQ3AKILYRKJZC2”:“假”,
“dlwFYqlu2mgetB5zO6TNmFGBWcb2”:“假”,
“h42bS6QbVEdUkNJv2yjrU7L09HX2”:“-LFzccEzciNPSTFAZAhb”,
“i0U1oShLCWRVPezSzfUQl7VmwFB2”:“假”,
“kAfSAHHUWNcCKRjR28EtuXclWmE3”:“假”,
“mSWA8kF4XUMsK3fXDqx7iIBBJcb2”:“假”,
“QNWBYTLFYVxOIHNJFKVRGJXCOK1”:“假”,
“yuUJHFcihgej6BFtCjXhL8cgLMC2”:“假”
}
},
每分钟都会在数据库上运行一个cron作业来删除旧帖子,例如:

exports.hourly\u作业=
functions.pubsub.topic('hourly-tick').onPublish((event)=>{
const currentTime=Date.now()
const getPostsForDate=admin.database().ref('posts').orderByChild('timeOfDeletion').endAt(currentTime);
返回getPostsForDate.once('value',(快照)=>{
var更新={};
snapshot.forEach((childSnapshot)=>{
const postDetails=childSnapshot.val();
const postitodelete=childSnapshot.key
更新[postIDtoDelete]=空
})
admin.database().ref('posts').update(更新)
})
});
在数据库中,如果用户开始与post对话,post子项中的watchedBy值将从“false”更改到对话的ID。每分钟,cron作业都会运行以删除旧帖子;但是,对话也需要删除。为了尽量减少数据下载使用,我将对话ID与watchedBy节点关联。现在,当删除子节点时,我如何迭代watchedBy子节点中的每个用户,查看值不是“false”,如果是,请删除具有该ID的对话?我需要这样做,而无需下载更多信息,只需访问子快照中的数据。我也在尝试最小化数据下载使用量,因此此设计是否可行和高效

旧代码(在我尝试最小化数据下载使用之前)

exports.hourly\u作业=
functions.pubsub.topic('hourly-tick').onPublish((event)=>{
const getPostsForDate=admin.database().ref('posts')。on('value',(快照)=>{
const currentTime=Date.now()
snapshot.forEach((childSnapshot)=>{
const postDetails=childSnapshot.val();
const timeofpostdelection=postDetails.timeOfDeletion
如果(currentTime>TimeofPostDelete){
const postitodelete=childSnapshot.key
const postDelete=admin.database().ref('/posts/'+postdodelet).remove()
const conversationsToRemove=admin.database().ref('/convolposts/'+postdodelete).on('value',(快照)=>{
snapshot.forEach((childSnapshot)=>{
const convakey=childSnapshot.key
ConversationReferenceDelete=admin.database().ref('/conversations/'+corvakey).remove()
})
})
}
})
})
返回真值
});
编辑:尝试迭代

<!-- language: node.js -->


 const peopleWatching = postDetails.child('watchedBy').val()

            updates[postIDtoDelete] = null
            for (child in people) {
                let value = child.val();
                if (value !== "false") {
                    convoUpdates[value] = null
                }
            }

const peopleWatching=postDetails.child('watchedBy').val()
更新[postIDtoDelete]=空
用于(人群中的儿童){
让value=child.val();
如果(值!=“假”){
更新[值]=空
}
}
请尝试以下操作:

return admin.database().ref(`/watchedBy`).once('value').then(snap => {
  if (snap.hasChildren()) {
    const updates = {};
    snap.forEach(child => {
      if(child.val() !== "false"){
        updates[child.key] = null;
      }
    });
    return p.update(updates);
  }else{
    return null;
  }
});
请试试这个:

return admin.database().ref(`/watchedBy`).once('value').then(snap => {
  if (snap.hasChildren()) {
    const updates = {};
    snap.forEach(child => {
      if(child.val() !== "false"){
        updates[child.key] = null;
      }
    });
    return p.update(updates);
  }else{
    return null;
  }
});

这将如何检查watchedBy值是否具有对话ID且不只是false?您编写的内容似乎达到了我已有的目的。是否有必要使用.value进行另一次引用?我是否可以不只是检查包含整个快照的postDetails?然后我想您应该使用
child.child('watchedBy')).val()!=“false”
如果我得到watchedBy子项,它将返回每个用户,每个用户可能返回不同数量的人。是否可以遍历每个人?对于watchesBy子项中的每个值还是…?是否希望我在答案中的编辑遍历所有内容?这将如何检查watchedBy值是否具有对话ID'