更新时间:2023-02-22 23:13:02
以下是无需使用额外参数即可执行此操作的查询:
creation
的公司:var ref = new Firebase(fbUrl+'/companies').orderByChild("creation").equalTo(null);
creation
的公司:var ref = new Firebase(fbUrl+'/companies').orderByChild("creation").startAt(!null);
".indexOn": "creation"
添加到规则中.编辑 2: 我很好奇,所以我将 11,000 条记录推送到 /companies2
(一半有 creation
孩子,一半没有).我能够使用上述查询(或我在下面显示的变体之一)在大约 4 秒内检索到 5500 条匹配记录.
编辑 3:如果您经常运行这些查询,根据 的存在将
.这样,您就可以分别读取这两个段,而无需依赖查询./companies
的子项分成两个 bin 可能是值得的创建
这是修改后的工厂的样子(我修改了 PLNKR匹配):
app.factory("CompaniesFactory",function($q, fbUrl){返回函数(hasCreation){var deferred = $q.defer();var ref = new Firebase(fbUrl+'/companies').orderByChild("creation");无功查询;如果(hasCreation){查询 = ref.startAt(!null);//或者://查询 = ref.startAt(true);} 别的 {查询 = ref.equalTo(null);//或者://查询 = ref.endAt(!null);//查询 = ref.endAt(true);}查询.一次(值",函数(数据快照){deferred.resolve(dataSnapshot.val());}, 函数(错误){deferred.reject(error);});返回 deferred.promise;}});
是的,可以在返回的 dataSnapshot 上调用 .on('child_added')
.请参阅 DataSnapshot.ref().
(留作参考)
另一种方法是将另一个名为 hasCreation
的参数添加到具有 creation
的 company
的子代,并通过该参数进行查询.
var ref = new Firebase(fbUrl+'/companies').orderByChild("hasCreation").equalTo(hasCreation);
hasCreation
为 null
,则查询将返回没有 hasCreation
子项的公司.hasCreation
为 true
,则查询将返回具有 hasCreation===true
的公司.{公司 1":{创造":{名称":公司1"},hasCreation":真},公司 2":{名称":公司 2"},公司 3":{名称":公司 3"},公司4":{创造":{名称":公司4"},hasCreation":真}}
您可以将 ".indexOn" : "hasCreation"
添加到您的规则中,如下所示:
"so:29179389":{.read":真的,.write":真的,公司":{".indexOn" : "hasCreation"}}
app.factory("CompaniesFactory",function($q, fbUrl){返回函数(hasCreation){var deferred = $q.defer();如果(!hasCreation){hasCreation = null;}var ref = new Firebase(fbUrl+'/companies').orderByChild("hasCreation").equalTo(hasCreation);ref.once(值",函数(数据快照){deferred.resolve(dataSnapshot.val());});返回 deferred.promise;}});
app.controller('HomeController',function($scope,fbUrl,CompaniesFactory) {$scope.getCompanies = 函数(hasCreation){var company = new CompaniesFactory(hasCreation).then(function(data){控制台日志(数据);$scope.companys = 数据;});}});
<div ng-controller="HomeController"><button ng-click="getCompanies(true)">使用创建查找</button><button ng-click="getCompanies(false)">查找而不创建</button><h2>公司:</h2>{{公司}}