我正在使用angularfire。 我的节点在firebase / texts /中就像那样松散:
{ title: 'title', text: 'long text' }
在我的服务中,我想获得标题,因为我想显示标题列表,我不想在此刻加载文本,因为通常是一个很长的文本。 我的服务看起来像这样:
var ref= new Firebase( FBURL+'/texts' );
var sync = $firebase(ref);
var text = sync.$asArray();
this.getTitle = function(){
var deferred = $q.defer();
var titles = [];
text.$loaded().then(function(data){
lodash.forEach(data, function(item){
titles.push({title: item.title});
});
deferred.resolve(titles);
})
.catch(function(err){
$state.go('login');
deferred.reject(err);
});
return deferred.promise;
};
我注意到在变量文本中有所有对象,所以我得到的所有内容都包含在文本中。我想要的只是文本中的选择名称:)
由于
答案 0 :(得分:3)
当您通过大多数API访问Firebase时,它将始终检索完整的节点。因此,您无法告诉它只检索属性的子集。
这意味着如果您真的只想要这些标题,则必须对数据进行不同的建模。现在你有这样的事情:
posts
-Jas73489342
title: "how to make a select query using firebase"
text: "...."
-Jasa8324023
title: "bicycling the grand canyon"
text: "..."
当你致电push
时,那些-J是Firebase生成的密钥。
为了能够只检索标题,您需要确保有一个节点只包含标题。因此,让我们将posts
分成两个独立的节点:titles
和texts
。
titles
-Jas73489342: "how to make a select query using firebase"
-Jasa8324023: "bicycling the grand canyon"
texts
-Jas73489342: "...."
-Jasa8324023: "..."
要在上述结构中添加新帖子,您可以执行以下操作:
var ref = new Firebase(FBURL),
titles = ref.child('titles'),
texts = ref.child('texts'),
item = { title: 'Petroglyphs in Albuquerqe', text: '...' };
var newItemRef = texts.push(item.text);
var key = newItemRef.key();
var newTitleRef = titles.child(key).set(item.title);
因此,我们首先将新帖子的文本添加到texts
节点,然后使用相同的键在titles
节点下添加标题。
您也可以保留posts
节点,但添加仅包含标题的titles
节点。无论哪种方式,您都将拥有一个能够准确表示您想要的节点:标题列表。