Javascript firebase和node js:将值添加到列表时发生的事件
我在节点js上使用firebase 下面是我的数据模型Javascript firebase和node js:将值添加到列表时发生的事件,javascript,node.js,firebase,firebase-realtime-database,firebase-admin,Javascript,Node.js,Firebase,Firebase Realtime Database,Firebase Admin,我在节点js上使用firebase 下面是我的数据模型 "sList" : { "-K_KxnexiRMvC81bTEVH" : { "description" : "sdf", "name" : "sdf", "users" : [ "-K_Kxnf9XBnClTgFv67z", "-K_KvlWOiNCOBDL-Vl3y" ] }, "-K_KxnexiRMvC81asdabTEVHas" : {
"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的两项建议:
"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;
})
您在此处违反了Firebase的两项建议:
"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;
})
你能为上述答案发布firebase添加查询吗?你能为上述答案发布firebase添加查询吗