Как удалить дочерний узел, включая вложенные дочерние узлы в Firebase Cloud Functions? - PullRequest
0 голосов
/ 09 октября 2018

Я использую облачные функции Firebase, чтобы удалить дочерний узел, когда событие истекло, и все значения удалены, кроме вложенного дочернего узла, который не удаляется

в чем проблема и как ее исправитьэто?

exports.removeOldMessages = functions.https.onRequest((req, res) => {
    const messagesRef = admin.database().ref('events')
    messagesRef.once('value', (snapshot) => {
        snapshot.forEach((child) => {
            child.forEach((child) => {
                if (Number(child.val()['endDate']) <= new Date().getTime()) {
                   child.ref.set(null)
              }
            })
        })
    })
    return res.status(200).end()
})

вот это JSON

{   "events" : { "N5iTuYzAbJa02RauxCl3uh2Nggz1" : {  
"-LNmIvSdrwK96KCGcmXm" : {
    "addedBy" : "Riyadh Figures",
    "coordinate" : [ 24.70914690943994, 46.78851541131735 ],
    "endDate" : "1538442801.0",
    "imagePath" : "-LNmIvSdrwK96KCGcmXm",
    "key" : "-LNmIvSdrwK96KCGcmXm",
    "title" : "hjihgf",
    "userPicture" : "N5iTuYzAbJa02RauxCl3uh2Nggz1"   } }

1 Ответ

0 голосов
/ 09 октября 2018

Я не понимаю, чего вы пытаетесь достичь, безусловно, вы хотите удалить узел события, если он истек.Попробуйте, как показано ниже:

var deleteObj ={}
messagesRef.once('value', (snapshot) => {
    snapshot.forEach((childSnap) => {
        childSnap.forEach((innerChild) => {
            if (Number(innerChild.val()['endDate']) <= new Date().getTime()) {
      // you can do this in two ways
      // step 1: Direct Deleting
               admin.database().ref('/events/' + childSnap.key + '/' + innerChild.key).set({}); 
      // step 2: Pass into Object
              deleteObj['/events/' + childSnap.key + '/' + innerChild.key] = null;
     // As you asked for deleting coordinate
             deleteObj['/events/' + childSnap.key + '/' + innerChild.key +'/' + 'coordinate']  = [] or {}; // this will do
          }
        })
    })
})

   if(deleteObj) // Step 2 
       admin.database().ref().update(deleteObj).then(function(){
           // console.log("Deleted");
       })

Шаг 2 будет полезен, если у вас есть несколько узлов, которые нужно удалить, так как fb поддерживает многолучевое обновление, или удалите

Оставьте одну вещь, как сказал Дуг в своем вопросекомментарий.Почему вы должны загрузить все данные, чтобы удалить некоторые узлы в одиночку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...