Firebase和AngularFire-数组中的$add-意外行为

Firebase和AngularFire-数组中的$add-意外行为,firebase,angularfire,firebase-realtime-database,Firebase,Angularfire,Firebase Realtime Database,根据文档,当我将$add与$asArray一起使用时,$add应该进行“推送”。而是创建一个散列键,而不是一个数字索引 因此,dummy:test有一个包含哈希键的父级。预期的是一个数字索引,我的意思是:数组项 有人能给我一些帮助吗?我在这个数据库只有一周的经验 结果是这个 dayPath = ref.path.toString() + '/' + configId + '/screens/' + screenIndex + '/days/',

根据文档,当我将$add与$asArray一起使用时,$add应该进行“推送”。而是创建一个散列键,而不是一个数字索引

因此,dummy:test有一个包含哈希键的父级。预期的是一个数字索引,我的意思是:数组项

有人能给我一些帮助吗?我在这个数据库只有一周的经验

结果是这个

dayPath = ref.path.toString() + '/' + configId + '/screens/' + screenIndex + '/days/',
                                // the ref for the days object
                                daysRef = fbutil.ref(dayPath),
                                // the sync for the days object
                                daysSync = fbutil.syncObjectReference(daysRef);

                            // the collection as a $firebase array
                            var list = daysSync.$asArray(),
                                items = [],
                                number;
                            console.log(list);
                            list.$add({dummy: 'Test'});

AngulareFire构建在Firebase JavaScript SDK上。因此,当AngularFire的文档说它在内部使用
push
时,它不是指JavaScript的
Array.push,而是指。Firebase的
push
生成自己的键,但不生成常规数组索引

原因在中得到了最好的解释,但基本上归结为:阵列在分布式环境中无法正常工作,因为所有客户端都必须对
阵列的长度达成一致意见,才能添加新项。

因此,
$firebaseArray.$add
将生成一个所谓的推送ID。它们是有序的,就像数组索引一样,但可以跨客户端生成,而不会产生冲突风险


我注意到你使用的是AngularFire的旧版本。我强烈建议您遵循“官方”的说法。

我想发表评论,但我还没有足够的声誉,所以我在这里发表评论

我眼中的解决方案非常简单:

而不是:

 screens
 ...0
 .......days  
 ..........0
 ..........1
 ..........2
 .........-JrT5ZATDELIR3gXAvah
 ................dummy: test
做:


泰,弗兰克!我更新了这篇文章,以便更好地观想。它现在包含结果。0,1,2是当前记录…我正在尝试添加一个像数组一样的键#3。但是,相反,它创建一个散列键并将我的虚拟对象作为子对象。我想说的是:数组中的记录已经存在。我只是想通过添加更多的唱片来“延续”这种时尚。看起来这些数组以前是以某种方式创建的。继续为这个已经存在的数组添加记录的最佳方法是什么?嗨,安德烈。这是应该避免的反模式。查看AngularFire指南部分,您可以看到它清楚地标记为反模式。看看这篇博文。这与上面Frank的解释相矛盾,Frank解释了为什么应该避免使用规则数组索引。完全正确。但我并不是想告诉他应该做什么,而是回答了一个特别的问题(我怎样才能继续数组)。如果不了解整个情况,几乎不可能给出做某事的最佳方式。
list.$add({dummy: 'Test'});
list[index] = {dummy: 'Test'};