如何对 firebase 进行 select 查询
how to make a select query to firebase
我正在使用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;
};
我注意到在可变文本中有所有 objects 所以我得到了包含文本的所有内容。我想要的只是来自文本的 select 名称 :)
谢谢
当您通过其大部分 API 访问 Firebase 时,它总是会检索完整的节点。所以你不能告诉它只检索属性的一个子集。
这意味着如果您真的只想要标题,则必须以不同的方式对数据建模。现在你有这样的东西:
posts
-Jas73489342
title: "how to make a select query using firebase"
text: "...."
-Jasa8324023
title: "bicycling the grand canyon"
text: "..."
那些 -J 是 Firebase 在您调用 push
时生成的密钥。
为了能够只检索标题,您需要确保有一个节点 只包含标题。因此,让我们将 posts
分成两个单独的节点:titles
和 texts
.
titles
-Jas73489342: "how to make a select query using firebase"
-Jasa8324023: "bicycling the grand canyon"
texts
-Jas73489342: "...."
-Jasa8324023: "..."
要向上述结构中添加一个新的 post,您需要执行如下操作:
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);
所以我们先把新post的正文添加到texts
节点,然后用同样的键在titles
节点下添加标题
您也可以保留 posts
节点原样,但 添加 一个仅包含标题的 titles
节点。无论哪种方式,您都将拥有一个精确表示您想要的内容的节点:标题列表。
我正在使用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;
};
我注意到在可变文本中有所有 objects 所以我得到了包含文本的所有内容。我想要的只是来自文本的 select 名称 :)
谢谢
当您通过其大部分 API 访问 Firebase 时,它总是会检索完整的节点。所以你不能告诉它只检索属性的一个子集。
这意味着如果您真的只想要标题,则必须以不同的方式对数据建模。现在你有这样的东西:
posts
-Jas73489342
title: "how to make a select query using firebase"
text: "...."
-Jasa8324023
title: "bicycling the grand canyon"
text: "..."
那些 -J 是 Firebase 在您调用 push
时生成的密钥。
为了能够只检索标题,您需要确保有一个节点 只包含标题。因此,让我们将 posts
分成两个单独的节点:titles
和 texts
.
titles
-Jas73489342: "how to make a select query using firebase"
-Jasa8324023: "bicycling the grand canyon"
texts
-Jas73489342: "...."
-Jasa8324023: "..."
要向上述结构中添加一个新的 post,您需要执行如下操作:
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);
所以我们先把新post的正文添加到texts
节点,然后用同样的键在titles
节点下添加标题
您也可以保留 posts
节点原样,但 添加 一个仅包含标题的 titles
节点。无论哪种方式,您都将拥有一个精确表示您想要的内容的节点:标题列表。