我想要做的是在我的Parse云代码中运行查询,将top2
数组的两个内容与用户关联的每个categoryId
对象的userCategory
属性进行比较。但是,当我运行此代码时,尽管数据库中存在匹配项,但它仍无法正确查找匹配项。
我认为问题出在这里:
query.containedIn('categoryId', top2);
query.equalTo('User', Parse.User.current())
我认为categoryId
可能不正确使用top2
。我也不完全确定第二行,因为它似乎会将// Query sent from search bar
Parse.Cloud.define("eBayCategorySearch", function(request, response) {
url = 'http://svcs.ebay.com/services/search/FindingService/v1';
Parse.Cloud.httpRequest({
url: url,
params: {
'OPERATION-NAME' : 'findItemsByKeywords',
'SERVICE-VERSION' : '1.12.0',
'SECURITY-APPNAME' : '*APP ID GOES HERE*',
'GLOBAL-ID' : 'EBAY-US',
'RESPONSE-DATA-FORMAT' : 'JSON',
'itemFilter(0).name=ListingType' : 'itemFilter(0).value=FixedPrice',
'keywords' : request.params.item,
},
success: function (httpResponse) {
// parses results
var httpresponse = JSON.parse(httpResponse.text);
var items = [];
httpresponse.findItemsByKeywordsResponse.forEach(function(itemByKeywordsResponse) {
itemByKeywordsResponse.searchResult.forEach(function(result) {
result.item.forEach(function(item) {
items.push(item);
});
});
});
// count number of times each unique primaryCategory shows up (based on categoryId), returns top two IDs and their respective names
var categoryIdResults = {};
// Collect two most frequent categoryIds
items.forEach(function(item) {
var id = item.primaryCategory[0].categoryId;
if (categoryIdResults[id]) categoryIdResults[id]++;
else categoryIdResults[id] = 1;
});
var top2 = Object.keys(categoryIdResults).sort(function(a, b)
{return categoryIdResults[b]-categoryIdResults[a]; }).slice(0, 2);
console.log('Top category Ids: ' + top2.join(', '));
var categoryNameResults = {};
// Collect two most frequent categoryNames
items.forEach(function(item) {
var categoryName = item.primaryCategory[0].categoryName;
if (categoryNameResults[categoryName]) categoryNameResults[categoryName]++;
else categoryNameResults[categoryName] = 1;
});
var top2Names = Object.keys(categoryNameResults).sort(function(a, b)
{return categoryNameResults[b]-categoryNameResults[a]; }).slice(0, 2);
console.log('Top category Names: ' + top2Names.join(', '));
// compare categoryIdResults to userCategory object
//Extend the Parse.Object class to make the userCategory class
var userCategory = Parse.Object.extend("userCategory");
//Use Parse.Query to generate a new query, specifically querying the userCategory object.
query = new Parse.Query(userCategory);
//Set constraints on the query.
query.containedIn('categoryId', top2);
query.equalTo("User", Parse.User.current())
//Submit the query and pass in callback functions.
var isMatching = false;
query.find({
success: function(results) {
var userCategoriesMatchingTop2 = results;
console.log("userCategory comparison success!");
console.log(results);
if (userCategoriesMatchingTop2 && userCategoriesMatchingTop2.length > 0) {
isMatching = true;
}
response.success({
"results": [
{ "Number of top categories": top2.length },
{ "Top category Ids": top2 },
{ "Top category names": top2Names },
{ "Number of matches": userCategoriesMatchingTop2.length },
{ "User categories that match search": userCategoriesMatchingTop2 }
]
});
console.log('User categories that match search: ' + results)
},
error: function(error) {
//Error Callback
console.log("An error has occurred");
console.log(error);
}
});
},
error: function (httpResponse) {
console.log('error!!!');
response.error('Request failed with response code ' + httpResponse.status);
}
});
});
与User对象进行比较,而不是与之关联的userCategory对象的实例。
完整代码:
Parse.Cloud.define("userCategoryCreate", function(request, response) {
var userCategory = Parse.Object.extend("userCategory");
var newUserCategory = new userCategory();
newUserCategory.set("categoryId", "");
newUserCategory.set("minPrice");
newUserCategory.set("maxPrice");
newUserCategory.set("itemCondition");
newUserCategory.set("itemLocation");
newUserCategory.set("parent", Parse.User.current());
newUserCategory.save({
success: function (){
console.log ('userCategory successfully created!');
response.success('Request successful');
},
error: function (){
console.log('error!!!');
response.error('Request failed');
}
});
});
userCategory结构:
I2014-05-13T18:11:25.243Z] v169: Ran cloud function eBayCategorySearch for user jKs5QpXjpd with:
Input: {"item":"iphone 5 16gb"}
Result: {"results":[{"Number of top categories":1},{"Top category Ids":["9355"]},{"Top category names":["Cell Phones & Smartphones","Mobile & Smart Phones"]},{"Number of matches":0},{"User categories that match search":[]}]}
I2014-05-13T18:11:26.530Z] Top category Ids: 9355
I2014-05-13T18:11:26.531Z] Top category Names: Cell Phones & Smartphones, Mobile & Smart Phones
I2014-05-13T18:11:26.633Z] userCategory comparison success!
I2014-05-13T18:11:26.633Z] []
I2014-05-13T18:11:26.633Z] User categories that match search:
日志:
{{1}}
答案 0 :(得分:2)
您似乎正在尝试匹配不存在的字段。基于创建代码,
query.equalTo('User', Parse.User.current())
应该是
query.equalTo('parent', Parse.User.current())