Search code examples
parse-platformparse-serverparse-android-sdk

Parse Query overrides new query over old one?


I'm doing parse query to get data but new query parameter overrides old one.

In my app user can block other users. When its done I write a "Block" object to database like this

I block other user:

ParseObject block = new ParseObject("Block");                                
block.put("owner",ParseUser.getCurrentUser());                                                
block.put("who",otherUser);

when I get data I use this query.

    //I blocked him. dont sow me his data.
    ParseQuery<ParseObject> benblock= new ParseQuery<ParseObject>("Block");
    benblock.whereEqualTo("owner", ParseUser.getCurrentUser());

    //He blocked me dont show me his data.
    ParseQuery<ParseObject> oblock = new ParseQuery<ParseObject>("Block");                
    oblock.whereEqualTo("who",ParseUser.getCurrentUser());

    query.whereDoesNotMatchKeyInQuery("user","owner",oblock);  //This line doesn't work                
    query.whereDoesNotMatchKeyInQuery("user","who",benblock);  //But this line does.

But when i retrieve data first query option

query.whereDoesNotMatchKeyInQuery("user","owner",oblock); 

doesnt work only last one

 query.whereDoesNotMatchKeyInQuery("user","who",benblock);

works. How can I fix this.


Solution

  • I solved my issue by doing this.

    According to this(https://github.com/parse-community/Parse-SDK-Android/issues/211#issuecomment-150047052) Parse query override whereDoesNotMatchKeyInQuery only for the same key. Which meand I can use that parameter twice in a same query but not same key. And I just created same value with different key.

    Previous my object was like this

        ParseObject object = new ParseObject("DataClass");
        object.put("post",post);
        object.put("user",user);
    

    Now It looks like this:

        ParseObject object = new ParseObject("DataClass");
        object.put("post",post);
        object.put("user",user);
        object.put("user2",user);//same user with the above one
    

    And I do query like this:

    ParseQuery<ParseObject> benblock= new ParseQuery<ParseObject>("Block");
    benblock.whereEqualTo("owner", ParseUser.getCurrentUser());
    
    ParseQuery<ParseObject> oblock = new ParseQuery<ParseObject>("Block");
    oblock.whereEqualTo("who",ParseUser.getCurrentUser());
    
    hashtag.whereDoesNotMatchKeyInQuery("user","owner",oblock);
    hashtag.whereDoesNotMatchKeyInQuery("user2","who",benblock);