Parse.com& Javascript - 根据“属于”语言

时间:2015-08-06 17:36:04

标签: javascript parse-platform

我需要弄清楚基于所选语言过滤用户的最有效方法是什么:

我有一个用户类和一个语言类。

用户“属于”一种语言,即用户表具有指向语言对象的指针。

示例:

用户类

objectID // 名称 // 语言

dxrObFI6Zn // Joe Smith // pZ8Urxwi8z

...

语言表

objectID // iso2 // 名称

pZ8Urxwi8z ZH英语

hj3dGlGmNw ES西班牙语

hj3dGlGmNw IN Indonesian

如何查询仅使用用户选择的语言的用户? (例如:如果用户选择英语和西班牙语,则仅显示说英语的用户和说西班牙语的用户)

非常感谢您的时间并期待您的回复!

https://dl.dropboxusercontent.com/u/21873950/Screen%20Shot%202015-08-06%20at%203.27.03%20PM.png

https://dl.dropboxusercontent.com/u/21873950/Screen%20Shot%202015-08-06%20at%203.26.36%20PM.png

1 个答案:

答案 0 :(得分:1)

根据Parse文档,您应该执行relational query

var User = Parse.Object.extend("User");
var Language = Parse.Object.extend("Language");

var innerQuery = new Parse.Query(Language);
innerQuery.equalTo("iso2", "EN");
var query = new Parse.Query(User);
query.matchesQuery("language", innerQuery);
query.find({
    success: function(users) {
        ...
        // You have the users with the language object EN.
    }
});

对于说英语和西班牙语的用户,您可以执行query on an array value

var Language = Parse.Object.extend("Language");
var queryEN = new Parse.Query(Language);
queryEN.equalTo("iso2", "EN");
var queryES = new Parse.Query(Language);
queryES.equalTo("iso2", "ES");

var languageQuery = Parse.Query.or(queryEN, queryES);
    languageQuery.find({
        success: function(results) {
           var User = Parse.Object.extend("User");
           var query = new Parse.Query(User); 
           query.containsAll("language", results);
           query.find({
               success: function(users) {
                   ...
                   // You have the users with the language object EN and ES.
               }
           });
    },
        error: function(error) {
             // There was an error.
    }
});

当然,您可以在执行任何请求之前获取并存储所有语言(languageQuery),以避免每次使用用户语言执行请求时都将其取出。