我有一个解析的类,比如图片.这些中的每一个都属于用户.对此用户的引用存储在Pictures表/类中作为Pointer
用户.
在我的云代码中,我试图使用主密钥获取属于用户的所有图片.以下是我的代码:
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不是问题.
我想我必须在这里使用关系/加入,但我不知道该怎么做.
指针在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