我的数据库中有一个名为'questions'的主节点,当我创建一个对该节点的引用并将其作为$ asObject()引入我的项目时,我可以修改单个问题和$ save()集合没有任何问题,但是当我尝试按优先级限制对象时,$ save()会删除对象的所有内容!
这很好用:
db.questions = $firebase(fb.questions).$asObject();
// later :
db.questions.$save();
// db.questions is an object with many 'questions', which I can edit and resave as I please
但是只要我将代码切换到此:
db.questions = $firebase(fb.questions.startAt(auth.user.id).endAt(auth.user.id)).$asObject();
// later :
db.questions.$save();
// db.questions is an empty firebase object without any 'questions!'
对于有限的物体(双关语是否有意)以及它们被改变和保存的能力有限制吗?保存实际上将问题的更新保存到数据库,但不知何故核实了本地$ firebase对象......
答案 0 :(得分:1)
第一行同步数组($asArray
)文档:
同步数组应该用于任何将被排序,迭代和具有唯一ID的对象列表。
第一行同步对象($asObject
)文档:
对象可用于存储键/值对,以及不用作集合的单个记录。
如上所示,如果您打算使用集合并使用limit
,那么您应该使用专为集合设计的工具(即$ asArray)。
如果您要使用Firebase SDK重新创建$save
的行为,它将如下所示:
var ref = new Firebase(URL).limit(10);
// ref.set(data); // throws an error!
ref.ref().set(data); // replaces the entire path; same as $save
因此,此处的行为与SDK完全匹配。从技术上讲,你不能在查询实例上调用set(),这实际上没有任何意义。 limit(10)对JSON对象意味着什么?如果你调用set,应该设置哪10个无序密钥?这里没有相关性,limit()实际上只对数据集合有意义,而不是键/值对列表。
希望有所帮助。