gpt4 book ai didi

javascript - Firebase 和 Node.js : event when value added to the list

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:54 25 4
gpt4 key购买 nike

我在 Node js 上使用 firebase。

下面是我的数据模型

"sList" : {
"-K_KxnexiRMvC81bTEVH" : {
"description" : "sdf",
"name" : "sdf",
"users" : [ "-K_Kxnf9XBnClTgFv67z", "-K_KvlWOiNCOBDL-Vl3y" ]
},
"-K_KxnexiRMvC81asdabTEVHas" : {
"description" : "sdf",
"name" : "pdsff",
"users" : [ "-K_Kxnf9XBnClTgasv67z", "-K_KvlWOiNCsadOBDL-Vl3y" ]
},
}

唯一的 ID 将被添加到每个文档的用户数组中。

每当添加唯一 ID 时,如何在每个文档中的所有用户数组上添加事件监听器

下面的代码我已经尝试过,但不起作用

var listRef = firebaseAdmin.database().ref('/sList');

listRef.on('child_changed', function(dataSnapshot) {
const msg= dataSnapshot.val();
const key= dataSnapshot.key();
var userRef = listRef.child();
userRef.on('child_changed', function(childDataSnapshot) {
const val=childDataSnapshot.val();
});
})

最佳答案

您违反了 Firebase 的两项建议:

  1. 不要嵌套数据
  2. 不要将数据存储在数组中

不要嵌套数据

您主要是被这里的嵌套所困扰:如果您只想监听 sList 的用户,则应该单独存储该数据。幸运的是,这很容易修复:

"sList" : {
"-K_KxnexiRMvC81bTEVH" : {
"description" : "sdf",
"name" : "sdf",
},
"-K_KxnexiRMvC81asdabTEVHas" : {
"description" : "sdf",
"name" : "pdsff",
},
},
"sListUsers": {
"-K_KxnexiRMvC81bTEVH" : [ "-K_Kxnf9XBnClTgFv67z", "-K_KvlWOiNCOBDL-Vl3y" ],
"-K_KxnexiRMvC81asdabTEVHas" : [ "-K_Kxnf9XBnClTgasv67z", "-K_KvlWOiNCsadOBDL-Vl3y" ]
}

因此,我们保留两个具有相同键的列表,这样您就可以查找 sList 的用户或元数据。

倾听用户的声音就变得很简单:

var listRef = firebaseAdmin.database().ref('/sListUsers/-K_KxnexiRMvC81bTEVH');

listRef.on('child_added', function(dataSnapshot) {
const user = dataSnapshot.val();
})

不要将数据存储为数组

第二个问题是您将用户存储在数组中:非唯一值的有序集合。但如果我们看看您拥有的内容,您更有可能希望将用户存储在唯一值的(可能无序的)集合中。这种集合类型通常称为集合

在 Firebase 中,一组用户被建模为:

当应用于您的数据模式时,它会变成:

"sList" : {
"-K_KxnexiRMvC81bTEVH" : {
"description" : "sdf",
"name" : "sdf",
},
"-K_KxnexiRMvC81asdabTEVHas" : {
"description" : "sdf",
"name" : "pdsff",
},
},
"sListUsers": {
"-K_KxnexiRMvC81bTEVH" : {
"-K_Kxnf9XBnClTgFv67z": true,
"-K_KvlWOiNCOBDL-Vl3y": true
},
"-K_KxnexiRMvC81asdabTEVHas" : {
"-K_Kxnf9XBnClTgasv67z": true,
"-K_KvlWOiNCsadOBDL-Vl3y": true
}
}

此处的 true 只是一个标记值,因为 Firebase 无法存储没有值的键。重要的是我们将用户的 id 存储为键,并保证其唯一。

您可以通过以下方式从此处获取用户:

var listRef = firebaseAdmin.database().ref('/sListUsers/-K_KxnexiRMvC81bTEVH');

listRef.on('child_added', function(dataSnapshot) {
const user = dataSnapshot.key;
})

关于javascript - Firebase 和 Node.js : event when value added to the list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com