匹配Firebase云功能中数据库对象的数组值

时间:2017-11-02 13:29:40

标签: javascript firebase firebase-realtime-database google-cloud-functions

这是我的第一个使用Google Cloud Functions& amp;火力地堡。我试图找到我要返回的数组的单个值并将其与设置变量进行比较,如果匹配,则在同一帐户中更新另一个子项的值。

我的应用程序用户可以在数据库中存储的login / user_id下向数据库添加记录。我试图获取" RecordName"的列表这是每个用户在其帐户中存储的login / user_id下的子项。

所以基本上每个" RecordName"在整个数据库中。当我想为这些记录运行特价时,我需要将该记录的名称与特殊记录的名称相匹配,如果匹配,则在该用户的帐户下更新另一个子值(& #34;特殊" =真。)。这样,当他们下次加载他们的应用程序时,我会突出显示该记录,因此他们知道它是特殊的。

当我使用..

const ref = admin.database().ref(`/store`);

...使用以下代码...

ref.on('value', function(snapshot) {
  // puts ALL items of the object into array using function  ..
   console.log(snapshotToArray(snapshot));
   });

......和功能......

function snapshotToArray(snapshot) {
var returnArr = [];

snapshot.forEach(function(childSnapshot) {
    var item = childSnapshot.val();
    item.key = childSnapshot.key;

    returnArr.push(item);
});

return returnArr;
};

...我得到整个数组就像它在数据库中一样:

-store
    -{ones_users_id}
        -recordname: value1
        -special: false
    -{anothers_users_id}
        -recordname: value2
        -special: false

等。等。

如果我的特殊记录被调用,"新手记录",什么是取出密钥的每个单独值的最佳方法:"记录名"从数组中,将每一个与var =" Newbie Record"如果匹配,则更新密钥的值:" special"是真的吗?

我是JSON和NodeJS的新手,我一直在这里寻找答案,无法找到我正在寻找的东西。您的反馈意见非常有用。

1 个答案:

答案 0 :(得分:0)

听起来您正在寻找查询您的数据库中有DeactivateActCtx(0, cookie); ReleaseActCtx(hActCtx); 的节点并更新它们。

一种简单的方法:

"recordname": "Newbie Record"

与您的代码的主要区别:

  • 我们现在使用查询来只读取我们想要修改的节点。
  • 我们现在使用const ref = admin.database().ref(`/store`); const query = ref.orderByChild("recordname").equalTo("Newbie Record"); query.once('value', function(snapshot) { snapshot.forEach(function(child) { child.ref.update({ special: true }) }); }); 只读取一次数据。
  • 我们循环遍历once()的子节点,因为查询可能会导致多个节点。
  • 我们使用每个孩子的引用,然后更新其snapshot属性。

我建议您仔细阅读Firebase queries in the documentation