Cloud Code中的关系查询(parse.com)

Rob*_*yon 8 javascript parse-platform

表结构:

Collection
name (String)

Image
collection (Pointer<Collection>)
url (String)
position (Number)

Imageclass有collection一个指向Collection该类的指针的列.

position用于Images在a内排序Collection.


Cloud Code中最有效的方法是如何实现以下目标?

让我们假设我有~3000张图片和3个收藏品.

构造一个返回数组的查询的最佳方法是什么,该数组包含至少有一个关联的所有集合,Image并且显示每个集合的前5个图像,并按position

每个集合的关联图像都需要包含在响应中,并且可能看起来像这样模糊:

results: [{
  collection: {
    name: 'foo'
  },
  images: [{
    position: 0,
    url: 'test.jpg'
  },
  {
    position: 1,
    url: 'test.gif'
  }]
}, {

  ...

}]    
Run Code Online (Sandbox Code Playgroud)

我现在所能想到的只是进行两个查询,一个是获取所有Collections,另一个是先获得所有Images,然后过滤它们,这看起来相当倒退,再加上Parse仅限于1000个结果集.我需要重新考虑我的桌面结构吗?

Rya*_*ger 1

根据您的限制,您可以在一次调用中完成此操作。

\n\n

如果您有少量Collection对象并且使用相对位置(每个Collection对象都有一个图像,其中position= 1、2 等),则无需过度考虑该问题。这些约束意味着“位置”< 6(或 5,如果 0 是您的第一个索引位置)的项目相对较少。

\n\n

只需对类进行调用Image,并将其限制为位置小于或等于 5 的对象。使用.include()返回Collection附加到每个Image对象的对象作为返回的一部分。然后以Image您认为合适的任何格式在本地对对象进行排序。

\n\n

请记住,Parse 将可返回的对象数量限制为 100,您可以将其增加到最多 1000。如果您.include()使用Collectionon every Image,则意味着每个返回Image计数为 2 个对象,因此您最多可以返回 500Image对象。听起来这远远超出了您的预期需求。

\n\n

Voil\xc3\xa1 - 一次调用,所有对象。

\n\n
var Image = Parse.Object.extend("Image");\nvar query = new Parse.Query(Image);\nquery.lessThan("number", 6); //Assumes a lowest index of 1; switch to 5 if your lowest index number is 0\nquery.include("collection");\nquery.find({\n  success: function(results) {\n    //Sort the results according to Collection, send to controllers, etc.\n    //Each result will have a pulled, valid Collection object ready on its .collection\n  },\n  error: function(error) {\n    alert("Error: " + error.code + " " + error.message);\n  }\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新\n还值得注意的是,无论是对于少量集合还是大规模(1000 个或 10,000 个集合),此方法都优于“嵌套查询”方法

\n