Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

I am trying to do something similar to this thread. https://getsatisfaction.com/apperyio/...
The differences are that I'm doing a count of all records that match the "id" from the "Properties" collection to the "PropID" column of the "Comments" collection and that match "pro" in the "ProCon" column of the "Comments" collection. and mapping the "count" to a label in the list that matches the "id". And then repeat the process again to count "con" in the "ProCon" column.

Here is the design:
Image

here is the flow:

on page load: Invoke service "GetProperties" a list service
On service success: Mapping
Image topic m

in the mapping I have the _id mapped to a invisible label in the listitem and added JS to the mapping

I used the JS from the thread mentioned above but I dont understand it enough to make it work. but here is what I got so far.
codefunction successFunction (data){
console.log(data);
if (data.length >0) {
$(element).closest("li").find("[dsid=PropIDLabel]").text(data[0].Body);

Code: Select all

             } 

}
ProsCount.execute({
data: {
"where": '{"PropID":"'+ value +'","ProCon": "pro"}'
},
success: function(data) {
successFunction(data);
}
});
return value;/code

Here is the mapping for the "CountPros" service.
Image
I'm not sure if I need to map the count service or not. It does not change the results of my test.

When I test the app and the page loads here is what the console log shows
Image
Here is the network, it is executing the service with the id of each property in the list.
Image
but the response is missing.
Image
Image

I'm not sure but I think my query syntax is wrong in the JS. (note: I use the exact same query in another part of my app without a problem, it is only when I try this list combination that it gets not response.)

Thank you for the help.

Serhii Kulibaba
Posts: 150
Joined: Tue Aug 27, 2013 1:47 pm

Combine queries from multiple Collections in list

Hello,

Please use $and parameter for multiple where clauses: https://devcenter.appery.io/documenta...

Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

This still does not work, returns empty response.
Image
Image

And if I test the query in the builder it returns a count of "0"
Image

but if I use the old syntax it works (without the $and)
Image

Serhii Kulibaba
Posts: 150
Joined: Tue Aug 27, 2013 1:47 pm

Combine queries from multiple Collections in list

Could you check the DB, how many these items there?

Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

For this particular query code{"PropID":"56ba3cdce4b0c4161647839d","ProCon":"pro"} /code there are 6 records. here is a picture of the app running while testing. the "Pros:" should have the response next to it, not the "...." that is just there for the loading. but the service is responding empty.
Image
each list item will be different. altogether there are 21 records in the database for now. but that increase quickly when the app is updated with this new feature.

here is another page in the app using the above query without any problems.
Image

Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

Ok so after playing with this some more I think I have managed to get the service to respond correctly for each list item.

I used the following JS code.
code
function successFunction (data){
console.log(data);

Code: Select all

 if (data.length >0) { 
     $(element).closest("li").find("[dsid=PropIDLabel]").text(data[0].Body); 

 } 

}
ProsCount.execute({
data: {
"where": '{"PropID":"'+value+'","ProCon":"pro"}',
"count": "1"
},
success: function(data) {
successFunction(data);
}
});
return value;

/code

But now the responses are not getting into the list items. is there something different with this type of mapping, should I not have any mapping for the second list service called by JS?

here is the mapping for the secondary list service.
Image

I'm pretty sure it has something to do with this part of the JS
code $(element).closest("li").find("[dsid=PropIDLabel]").text(data[0].Body);/code I really have no clue what this does. I think it is supposed to find the matching label??? I don't even know if this is correct since I took it from the other thread and swapped out the label name for mine.

Serhii Kulibaba
Posts: 150
Joined: Tue Aug 27, 2013 1:47 pm

Combine queries from multiple Collections in list

Please clarify, where do you run function "successFunction"? Is it from the success event? I can't see response parameter "Body" in your service. Also, there object "element" is not available

Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

I'm not sure what the "Body" you are referring to, where would I find this?

The "successFunction is being ran in the success mapping on my "GetProperties" list service. here is a pic of the mapping.
Image
in this mapping is the JS that calls the "successFunction".

What should I have instead of "element"???
I'm still new to JS.

Michael Droll
Posts: 0
Joined: Wed Mar 04, 2015 5:05 am

Combine queries from multiple Collections in list

is this the "Body" you are asking about?
Image

Return to “Issues”