Get Object Count¶
The Object Count API provides a way to obtain the following values from the server:
- Number of objects in a table
 - Number of objects matching query
 - Number of related objects
 
Retrieving object count for a table/query can be done with a 'data store' object. A reference to a data store can be obtained using the following code:
// obtaining DataStore for the NSDictionary approach
MapDrivenDataStore *dataStore = [Backendless.shared.data ofTable:@"TABLE-NAME"];
// obtaining DataStore for the custom-class approach
DataStoreFactory *dataStore = [Backendless.shared.data of:[YOUR-CLASS class]];
// obtaining DataStore for the NSDictionary approach
let dataStore = Backendless.shared.data.ofTable("TABLE-NAME")
// obtaining DataStore for the custom-class approach
let dataStore = Backendless.shared.data.of(YOUR-CLASS.self)
where
| Argument | Description | 
|---|---|
YOUR-CLASS | 
identifies a table on the server. | 
"TABLE-NAME" | 
the name of the table for which to get the data store. All subsequent data store operations will be performed in the specified table. | 
Important
All Data Service methods in Backendless must be accessed through data stores.
A data store object provides the following APIs for retrieving object counts in Backendless:
// get total number of objects in a table identified by the dataStore object
- (void)getObjectCountWithResponseHandler:^(NSNumber * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
// get number of objects for a query in the table identified by the dataStore object
- (void) getObjectCountWithQueryBuilder:(DataQueryBuilder * _Nonnull)queryBuilder responseHandler:^(NSNumber * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
// get total number of objects in a table identified by the dataStore object
func getObjectCount(responseHandler: ((NSNumber) -> Void)!, errorHandler: ((Fault) -> Void)!)
// get number of objects for a query in the table identified by the dataStore object
func getObjectCount(queryBuilder: DataQueryBuilder, responseHandler: ((NSNumber) -> Void)!, errorHandler: ((Fault) -> Void)!)
// get total number of objects in a table identified by the dataStore object
- (void)getObjectCountWithResponseHandler:^(NSNumber * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
// get number of objects for a query in the table identified by the dataStore object
- (void) getObjectCountWithQueryBuilder:(DataQueryBuilder * _Nonnull)queryBuilder responseHandler:^(NSNumber * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
// get total number of objects in a table identified by the dataStore object
func getObjectCount(responseHandler: ((NSNumber) -> Void)!, errorHandler: ((Fault) -> Void)!)
// get number of objects for a query in the table identified by the dataStore object
func getObjectCount(queryBuilder: DataQueryBuilder, responseHandler: ((NSNumber) -> Void)!, errorHandler: ((Fault) -> Void)!)
where:
| Argument | Description | 
|---|---|
responseHandler | 
a block (closure) to handle successful result of an asynchronous call. | 
errorHandler | 
a block (closure) to handle fault result of an asynchronous call. | 
Return Value¶
The API returns the object count as a result of the request.
Examples¶
The following sample request retrieves total number of objects in table Order:
DataStoreFactory *dataStore = [Backendless.shared.data of:[Order class]];
[dataStore getObjectCountWithResponseHandler:^(NSNumber *objectCount) {
    NSLog(@"Total objects in the Order table = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
DataQueryBuilder *queryBuilder = [DataQueryBuilder new];
[queryBuilder setWhereClauseWithWhereClause:@"orderAmount > 100"];
DataStoreFactory *dataStore = [Backendless.shared.data of:[Order class]];
[dataStore getObjectCountWithQueryBuilder:queryBuilder responseHandler:^(NSNumber *objectCount) {
    NSLog(@"Objects with orderAmount > 100 in the Order table = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
Person[address].objectId = 'XXXXX'
DataQueryBuilder *queryBuilder = [DataQueryBuilder new];
[queryBuilder setWhereClauseWithWhereClause:@"Person[address].objectId = 'XXXXX'"];
DataStoreFactory *dataStore = [Backendless.shared.data of:[Address class]];             
[dataStore getObjectCountWithQueryBuilder:queryBuilder responseHandler:^(NSNumber *objectCount) {
    NSLog(@"Related objects count = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
The following sample request retrieves total number of objects in table Order:
let dataStore = Backendless.shared.data.of(Order.self)
dataStore.getObjectCount(responseHandler: { objectCount in
    print("Total objects in the Order table = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
let queryBuilder = DataQueryBuilder()
queryBuilder.setWhereClause(whereClause: "orderAmount > 100")
let dataStore = Backendless.shared.data.of(Order.self)
dataStore.getObjectCount(queryBuilder: queryBuilder, responseHandler: { objectCount in
    print("Objects with orderAmount > 100 in the Order table = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
Person[address].objectId = 'XXXXX'
let queryBuilder = DataQueryBuilder()
queryBuilder.setWhereClause(whereClause: "Person[address].objectId = 'XXXXX'")
let dataStore = Backendless.shared.data.of(Address.self)
    dataStore.getObjectCount(queryBuilder: queryBuilder, responseHandler: { objectCount in
print("Related objects count = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
The following sample request retrieves total number of objects in table Order:
MapDrivenDataStore *dataStore = [Backendless.shared.data ofTable:@"Order"];
[dataStore getObjectCountWithResponseHandler:^(NSNumber *objectCount) {
    NSLog(@"Total objects in the Order table = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
DataQueryBuilder *queryBuilder = [DataQueryBuilder new];
[queryBuilder setWhereClauseWithWhereClause:@"orderAmount > 100"];
MapDrivenDataStore *dataStore = [Backendless.shared.data ofTable:@"Order"];
[dataStore getObjectCountWithQueryBuilder:queryBuilder responseHandler:^(NSNumber *objectCount) {
    NSLog(@"Objects with orderAmount > 100 in the Order table = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
Person[address].objectId = 'XXXXX'
DataQueryBuilder *queryBuilder = [DataQueryBuilder new];
[queryBuilder setWhereClauseWithWhereClause:@"Person[address].objectId = 'XXXXX'"];
DataStoreFactory*dataStore = [Backendless.shared.data ofTable:@"Address"];
[dataStore getObjectCountWithQueryBuilder:queryBuilder responseHandler:^(NSNumber *objectCount) {
    NSLog(@"Related objects count = %@", objectCount);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
The following sample request retrieves total number of objects in table Order:
let dataStore = Backendless.shared.data.ofTable("Order")
dataStore.getObjectCount(responseHandler: { objectCount in
    print("Total objects in the Order table = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
let queryBuilder = DataQueryBuilder()
queryBuilder.setWhereClause(whereClause: "orderAmount > 100")
let dataStore = Backendless.shared.data.ofTable("Order")
dataStore.getObjectCount(queryBuilder: queryBuilder, responseHandler: { objectCount in
    print("Objects with orderAmount > 100 in the Order table = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
Person[address].objectId = 'XXXXX'
let queryBuilder = DataQueryBuilder()
queryBuilder.setWhereClause(whereClause: "Person[address].objectId = 'XXXXX'")
let dataStore = Backendless.shared.data.ofTable("Address")
dataStore.getObjectCount(queryBuilder: queryBuilder, responseHandler: { objectCount in
    print("Related objects count = \(objectCount)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
Codeless Reference¶

where:
| Argument | Description | 
|---|---|
table name | 
Name of the data table where to calculate the object count. | 
where clause | 
Optional argument. If set, it is a search query used by the server it to determine the number of objects matching the condition. Refer to the Search With The Where Clause topic for more information. | 
distinct | 
Used to return unique objects from the data table. Only custom properties/columns are considered in the query. Hence, if the data table contains a duplicate object, then it is not counted in the operation. | 
Returns the number of objects in a table (if the where clause is not set), otherwise the number of objects matching the search query.
Consider the following records in the employees data table:

The example below counts specific objects in the data table since the where clause condition is set to exclude objects that contain the value 'Manager' in the column position. Thereby, objects with the 'Manager' values in the position column are not counted in the operation.

The result of this operation will look as shown below after the Codeless logic runs:

Consider the data table below that contains two duplicate objects:

The Codeless logic below has a where clause condition which is set to include in the operation only those objects that contain the value 'CEO' in the position column. The distinct parameter is set to true, hence the operation is set to count only unique objects, duplicates are skipped.

The result of this operation will look as shown below after the Codeless logic runs:
