2014-04-09 14 views
33

Ho una funzione cloud su Parse. Quando viene chiamato recupera un PFObject quindi aggiunge una relazione tra tale oggetto e l'utente. Questa parte funziona bene (visto verso la fine della funzione). Sto avendo difficoltà a raggiungere la query che seleziona il PFObject di ignorare quelli che l'utente è già legato allaSintassi della query relazionale di Parse Cloud Code

Ecco il mio codice:

Parse.Cloud.define("NextMedia", function (request, response) { 

    var LikeRequest = Parse.Object.extend("LikeRequest"); 
    var query = new Parse.Query(LikeRequest); 

    query.equalTo("completed", false); 
    console.log("user: " + Parse.User.current().id); 

    query.notEqualTo("user", Parse.User.current()); 

    // Also only fetch if never been sent before 
    // HERE SHOULD USE THE BELOW RELATIONSHIP 
    var innerQuery = new Parse.Query(Parse.User); 
    innerQuery.exists(Parse.User); 
    query.matchesQuery("sentTo", innerQuery); 

    query.ascending("createdAt"); 

    query.first({ 

     success: function (object) { 
      // Successfully retrieved the object. 
      console.log("Got 1 object: " + object.get('mediaId')); 

      // Record that the user has been sent it 
      var user = Parse.User.current(); 
      var relation = object.relation("sentTo"); // RELATION ADDED HERE 

      relation.add(user); 
      object.save(); 

      response.success(object); 
     }, 
     error: function (error) { 
      console.log("Error: " + error.code + " " + error.message); 

      response.error("Error getting next mediaId"); 
     } 
    }); 
}); 

Sono sicuro che io non sono solo capire come la sintassi della query di relazione funziona.

+0

Nella classe LikeRequest hai una colonna utente? Non sto capendo query.notEqualTo ("utente", Parse.User.current()); – bmurmistro

+0

Nella sezione inferiore in cui viene aggiunta la relazione, viene aggiunta una colonna molti a molti utenti. – Darren

+0

Ci scusiamo per la risposta ritardata. Hai provato qualcosa del genere: var innerQuery = LikeRequest.relation ("sendTo"). Query(); innerQuery.exists (Parse.User); – bmurmistro

risposta

1

che dire di Query Constraints?

Se si desidera recuperare gli oggetti che non corrispondono a uno qualsiasi dei diversi valori è possibile utilizzare notContainedIn

// Finds objects from anyone who is neither Jonathan, Dario, nor Shawn 
query.notContainedIn("playerName", 
        ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]); 
1

penso Kerem ha parzialmente corretti ma notContained in non è sufficiente dinamica per il vostro caso.

È necessario creare query from the relation e quindi utilizzare doesNotMatchKeyInQuery per escludere tali oggetti dalla query esterna.

2

Questo tratto:

// Also only fetch if never been sent before 
// HERE SHOULD USE THE BELOW RELATIONSHIP 
var innerQuery = new Parse.Query(Parse.User); 
innerQuery.exists(Parse.User); 
query.matchesQuery("sentTo", innerQuery); 

potrebbe essere cambiato a:

// Also only fetch if never been sent before 
query.notContainedIn("sentTo",[Parse.User.current()]) 

che funziona. Parse Query

Problemi correlati