如何使用子查询过滤对象?

时间:2014-07-08 23:13:21

标签: rest parse-platform

使用 shiki/kaiseki 与Parse REST api进行交互。我正在尝试为用户提供没有相关A的所有B个。

我知道我可以为用户获得Bs:

parseClient.getObjects('B', {
  where: {
    user: { 
      __type: "Pointer",
      objectId: "id here",
      className: "_User"
    }
  },
  keys: 'a'
}, callback)

然后拔出对象ID以获取不良的A ID。

aIds = [ Bs ].map(function (b) {
  return b.a.objectId
})

然后查询As匹配id。

parseClient.getObjects('A', {
  where: {
    objectId: { $nin: aIds }
  }
}, callback)

但是用户可以拥有比查询限制200更多的B.如何重写它以使用子查询?


$ dontSelect

嵌套的密钥参数不起作用,这使得这样的东西变得平坦。

parseClient.getObjects('A', {
  where: {
    objectId: {
      $dontSelect: {
        query: {
          className: 'B',
          where: { user query },
        },
        key: 'a.objectId 
      }
    }
  }
}, callback)

// { code: 105, error: 'invalid field name: ' }

$ notInQuery

似乎没有办法将$ notInQuery放在where的根目录中或引用当前对象。

parseClient.getObjects('A', {
  where: {
    $notInQuery: {
      className: 'B',
      where: { user query },
      key: 'a'
    }
  }
}, callback)

// { code: 102, error: 'Invalid key $notInQuery for find' }

帮助!

1 个答案:

答案 0 :(得分:0)

这是Parse模型的一个限制,我发现它的唯一方法是相应地调整你的模式。

您可以采用的一种方法是A上的关系包含所有相关的User指针,然后针对关系字段执行$ne

where: {
  'relationColumn' : {
    '$ne': {
      '__type': 'Pointer',
      'className': '_User',
      'objectId': 'user b id here'
    }
  }
}