Jordash
Jordash

Reputation: 3093

Query on multiple values in Firebase, similar to IN() SQL functionality

I have an array that looks like this:

validZipCodes = [
  "84606",
  "84605",
  "84601"
]

I'm querying some data like this:

var Jobs = firebase.child('Jobs');

I tried this:

var Jobs = firebase.child('Jobs').orderByChild('ZipCode').equalTo($scope.validZipCodes);

But it returned an error that it was an invalid data-type, is there anyway to say something like:

var Jobs = firebase.child('Jobs').orderByChild('ZipCode').inArray($scope.validZipCodes);

Or something like that.

Note that this is an array comparison & not querying text in an object.

Upvotes: 2

Views: 4016

Answers (2)

Jordash
Jordash

Reputation: 3093

Here is how I eventually did it:

With the foreach command you can easily manipulate data and then push it into an array to re-create a collection of data however you need it.

$scope.validZipCodes = [];
$scope.validContractorJobs = [];

var Jobs = firebase.child('Jobs');

contractorJobs.on('value', function(snap) {
            snap.forEach(function(job) {
                angular.forEach($scope.validZipCodes, function(value, key) {
                    if(job.val().ZipCode == value) {
                        $scope.validContractorJobs.push(job.val());
                    }
                });
            });
        });

Upvotes: 4

sbolel
sbolel

Reputation: 3526

The Firebase .equalTo() documentation states that the value argument should be one of the following types: String, Number, Null, or Boolean.

  • You are getting an invalid data-type error because you are not passing one of these types.

  • There is no method like .inArray() (i.e. querying for equalTo multiple values).

You can review all of the Firebase Query Methods in the Query documentation, which also suggests:

Read our documentation on ordering and querying data for more information and examples.

Upvotes: 1

Related Questions