我有两个类,一个cloth,一个collection,collection中包含有几个cloth的pointer数组,因为使用的是handlebar.js来渲染模板,所以希望一次能够在取得collection后也获取到cloth相关的数据,但是看了很多遍文档和论坛里的问答都没有找到我想要的解决方法,有没有人能帮我?谢谢!

cloth 包含name,image等相关字段,
collection包含name,user,uppers(cloth的pointer数组),bottoms(同样是cloth的pointer数组)

相关代码

//handlebar.js 模板处理
var context = {
  collections: []
};

//查询数据
var query = new AV.Query('Collection');
query.find().then(function (collections){
    collections.forEach(function(collection){
      var collectionName = collection.get('name');
      //查询cloth数据
      //这里如果增加一层query find,则无法完整将cloth数据填充到context

//填充模板数据
context.collections.push({
        collectionName,
        uppersCloth,
        bottomsCloth
      });
    })
})

我先了解一下,uppersCloth 与 bottomsCloth 中会不会有大量重复的 cloth,collections 中不同的 collection 之间会不会有大量重复的 cloth?

collection里的每一条记录里的uppersCloth和bottomsCloth中不会有重复的cloth,但是所有记录里肯定会有重复的cloth,举个例子,一件cloth可能属于多条collection中的uppersCloth,cloth有个属性是决定他是uppers还是bottoms。

之前有考虑过用中间表,但是感觉略麻烦,而且也存在多次查询的问题,这样多次查询后,我这边不知道怎么能够保证最后汇总数据到模板渲染的context

首先,如果没有大量重复数据的话,可以直接 `query.include(['uppersCloth', 'bottomsCloth']).find() 来直接在一次查询中得到所有的数据。

(这里需要插一句题外话,得到的 collection 可以直接 .toJSON() 之后填充给 context,但是目前 SDK 有个 bug Pointer 的数据不会自动填充到 json 中,需要手动处理一下)

显然,如果不同的 collection 之间会有重复的 cloth 的话,这个请求返回的数据中会有很多重复的 cloth。如果这会是一个问题的话,那么就需要分两次查了,首先直接 query.find() 查到所有的 collections(以及对应 Pointer 类型的 cloth),然后遍历 collections 的 uppersCloth 与 bottomsCloth 得到一个 objectId 的列表(需要去重),然后使用 AV.Object.fetchAll 方法得到所有 cloth 的内容。如果需要的话再遍历一边 collections 的 uppersCloth 将 cloth Pointer 替换为有内容的 cloth。

好的,非常感谢!
我先试试,再次感谢!

假如cloth里面还有pointer呢?那怎么一次性获取这种嵌套的pointer所有数据?