通过orderByChild抓取firebase然后更新结果键

时间:2017-08-25 05:32:37

标签: javascript firebase firebase-realtime-database

所以我有这个查询,目前收集materialName等于黄金的所有数据。我想把一切变为假。

// materialName = "gold" for example
database.ref('/app/posts').orderByChild('material').startAt(materialName).endAt(materialName).once('value', function (snapshot) {
    const materials = snapshot.val();
})

我尝试过这样的事情:

database.ref('/app/posts').orderByChild('material').startAt(materialName).endAt(materialName).once('value', function (snapshot) {
    database.ref('/app/posts').update({material: false});
})

我也试过这个:

const newData = Object.assign({}, materials, {material: false});
// but this updates outside of the post, result will be:


"posts" : {
      "material": false,
      "post-1503586" : {
        "title": "sample title",
        "material" : "gold"
      },
      "post-9172991" : {
        "title": "sample title",
        "material" : "silver"
      }
    }

示例json:

"posts" : {
      "post-1503586" : {
        "title": "sample title",
        "material" : "gold"
      },
      "post-9172991" : {
        "title": "sample title",
        "material" : "silver"
      }
    }

1 个答案:

答案 0 :(得分:3)

您需要循环结果(因为可以有多个匹配的节点),然后更新每个:

database.ref('/app/posts')
  .orderByChild('material')
  .equalTo(materialName)
  .once('value', function (snapshot) {
    snapshot.forEach(function(child) {
      child.ref.update({material: false});
    });
});

您还会注意到我已将您的.startAt().endAt()更改为equalTo(),这样可以用更少的代码提供相同的结果。