web-dev-qa-db-ja.com

Parse.com:objectIdを持つユーザーに属するすべてのオブジェクトを検索します

私は解析中のクラスを持っています、とPicturesは言います。これらはそれぞれユーザーに属します。このユーザーへの参照は、ユーザーに対してPointerとしてPicturesテーブル/クラスに保存されます。

私のクラウドコードでは、マスターキーを使用して、ユーザーに属するすべての画像を取得しようとしています。以下は私のコードです:

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

  Parse.Cloud.useMasterKey();

  var query = new Parse.Query("Pictures");

  query.equalTo("user", request.params.user);

  query.find({
    success: function(results) {

      var status = "Found " + results.length + " pictures for userId " + request.params.user;
      response.success(status);

    },

    error: function() {

      status = "No pictures exist for userId " + request.params.user; 
      response.error(status);
    }
  });
});

このコードは、たとえばIDが「xyz」の特定のユーザーの画像が0枚であることを出力します。しかし、ユーザーにはたくさんの写真が保存されていることがわかります。

また、コンソールログにコードがマスターとして実行されていることがわかるので、問題がマスターキーの使用にあるのではないことも確認しました。さらに、objectIdで画像をクエリすると、結果に表示されます。つまり、ここではACLは問題ではありません。

私はここで関係/参加を使用する必要があると思いますが、それを行う方法がわかりません。

12
zzlalani

ポインタはParseデータベースにオブジェクトとして格納されるため、query.equalTo()関数を使用して文字列をオブジェクトと比較しようとしても、何も見つかりません。ポインタの保存方法は次のとおりです。

{
    __type: 'Pointer',
    className: '_User',
    objectId: user-object-id
}

ポインタを使用してクラスをクエリしていて、結果にオブジェクト全体がネストされた状態で表示されるようにする場合は、クエリで次のように設定する必要があります。

var query = new Parse.Query('Pictures');
query.include('user');

ポインタ列で検索するクエリでは、ユーザーオブジェクトをネストされたユーザーオブジェクトと比較します。

var user = new Parse.User();

// Set your id to desired user object id
user.id = your-user-id;

var query = new Parse.Query('Pictures');

// This include will make your query resut comes with the full object
// instead of just a pointer
query.include('user');

// Now you'll compare your local object to database objects
query.equalTo('user', user);
query.find({
    success: function(userPicture) {
        response.success(userPicture);
    }
});

とにかく、ユーザーに関連する写真がたくさんある場合は、おそらくポインターではなく解析関係を検索しているようです: https://www.parse.com/docs/relations_guide

26
Murilo

ポインタを持つ親オブジェクトと子オブジェクトを取得するクエリを作成したが、ACLによる読み取りアクセス権がない場合、クエリは親オブジェクトのみを返す可能性があり、ACLでは読み取りができないため子はnullになります。

0
Abdul Vajid

パラメータに問題がある可能性があります。 「user」がポインタの場合、PFObjectsがparamsとして送信されない可能性があるため、「request.params.user」は正しくありません。 「user」がポインタの場合は、「request.user」を使用します。 request.params.userがuserIdの文字列である場合、Muriloによってすでに提案されているように、クエリの前にIdを使用してPFObjectシェルを再構築できますが、「user」パラメータを削除してrequest.userを使用すると、コードが短くなり、値を複製しないでください。 Muriloのソリューションは、現在のユーザーのID以外のuserIdを渡すことができるため、有益です。

0
Troup