Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据库:为什么我查询的datasnapshot中的key/ref引用其父项?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase数据库:为什么我查询的datasnapshot中的key/ref引用其父项?

Javascript Firebase数据库:为什么我查询的datasnapshot中的key/ref引用其父项?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想从实时数据库中删除通过查询查找的条目,但我得到了ref和key属性的意外结果 ref('photos/users/USERID') .orderByChild('photoname') .equalTo('photoname i want to look up') .limitToFirst(1) .query('once') .then(snapshot => { // correct data at 'photos/users

我想从实时数据库中删除通过查询查找的条目,但我得到了ref和key属性的意外结果

ref('photos/users/USERID')
    .orderByChild('photoname')
    .equalTo('photoname i want to look up')
    .limitToFirst(1)
    .query('once')
    .then(snapshot => {
        // correct data at 'photos/users/USERID/PHOTOID'
        const entry = snapshot.val(); 

        // seems to be the ref to photos/users/USERID'
        const ref = snapshot.ref; 

        // seems to be USERID
        const key = snapshot.key
    })

为什么这些不是我刚找到的条目的参考/键?删除此条目的最佳方法是什么?

您的ref和key基于ref('photos/users/USERID'),而不是您创建的筛选子集。是否有任何理由不调用ref('photos/users/USERID/PHOTOID')?

您的ref和key基于ref('photos/users/USERID'),而不是您创建的筛选子集。是否有任何理由不调用ref('photos/users/USERID/PHOTOID')?

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表

您的代码需要考虑此列表,并迭代
snapshot.forEach()
以获得实际匹配的项:

ref('photos/users/USERID')
    .orderByChild('photoname')
    .equalTo('photoname i want to look up')
    .limitToFirst(1)
    .query('once')
    .then(snapshot => {
      snapshot.forEach(child => {
        const entry = child.val();     
        const ref = child.ref;     
        const key = child.key
      });
    })

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表

您的代码需要考虑此列表,并迭代
snapshot.forEach()
以获得实际匹配的项:

ref('photos/users/USERID')
    .orderByChild('photoname')
    .equalTo('photoname i want to look up')
    .limitToFirst(1)
    .query('once')
    .then(snapshot => {
      snapshot.forEach(child => {
        const entry = child.val();     
        const ref = child.ref;     
        const key = child.key
      });
    })

我还没有照片的id,这就是我试图查询的内容,并且(之后)通过ref/key属性进行访问。但显然,我必须先对结果进行迭代。明白了-我不知道是否有其他选择,但我通过调用它、获取id、调用那个、删除iti来实现这一点。我还没有照片的id,这就是我试图查询的内容,并且(之后)通过ref/key属性进行访问。但显然我必须先迭代结果。明白了-我不知道是否有其他选择,但我通过调用它,获取id,调用它,然后删除它来实现这一点。有没有一种方法可以通过某种索引访问这些子级?因此,如果我执行一个limit-by-1查询,我是否可以获取第一个(也是唯一一个)结果而不必进行迭代?一个项目的列表仍然是一个列表,因此您需要进行迭代。如果你想防止这种情况发生,你可以只做一次
('child_added'
。但这比我建议的更牺牲了代码的清晰度(从而牺牲了可维护性)。我目前正在做这件事,这有点难看,所以我想知道是否有类似
getChildAt(0)
(虽然我应该能够通过使用
array.reduce
)来改进代码,但是有没有办法通过某种索引访问这些子级?因此,如果我执行一个limit-by-1查询,我可以获取第一个(并且只能)吗结果而不必迭代?一个项目的列表仍然是一个列表,因此您需要迭代。如果您想避免这种情况,您可以执行一次
('child_added'
),但这会牺牲代码的清晰度(从而降低可维护性)比我建议的要多。我目前正在做这件事,这有点难看,所以我想知道是否有类似于
getChildAt(0)
(尽管我应该能够通过使用
array.reduce
来改进代码)