我成功地从
获取数据 GET /mycollection?ql=select data.visitor.badges where data.visitor._id = 'f33498'
返回
{
"action": "get",
"application": "313hhlkhj77080",
"params": {
"ql": [
"select data.visitor.badges where data.visitor._id = 'f33498'"
]
},
"path": "/mycollection",
"uri": "http://xxxx/appservices/xxxxxx/mycollection",
"list": [
[
[
"New Visitor",
"Cart Abandoner"
]
],
[
[
"New Visitor",
"Repeat Visitors",
"Cart Abandoner"
]
],
[
[
"New Visitor",
"Repeat Visitors",
"Browse Abandoner"
]
]
],
"timestamp": 1407968065207,
"duration": 35,
"organization": "visitor-baas",
"applicationName": "sandbox",
"count": 3
}
但是,我无法弄清楚如何修改以下查询以允许我将结果集缩小到仅包含" Cart Abandoner" data.user.badges数组中的值。
这可能吗?我试过了:
GET /mycollection?ql=select data.visitor.badges where data.visitor.badges = 'Cart Abandoner'
这似乎返回data.visitor.badges数组,其中' Cart Abandoner'是数组的最后一个位置。
GET /mycollection?ql=select data.visitor.badges where data.visitor.badges contains 'Cart Abandoner'
这似乎没有任何回报。
我错过了什么?
答案 0 :(得分:0)
不幸的是,目前无法查询数组。您最好的选择是将其存储为对象。
答案 1 :(得分:0)
偶然的事情:我一直在查询数组的元素,但是ql查询字符串有点气质。如果'string'包含在数组'element'中的任何位置,则element ='string'应返回整个JSON有效负载,因此您获得混合结果的事实可能是由于嵌套数组的复杂性。
那就是说,ql查询字符串允许你限制返回的资源(就像你的第一个例子,其中id ='xxx')。除了来自该资源的整个JSON有效负载之外,没有任何方法可以返回任何其他内容(例如根据查询限制截断数组)。
所以,如果您尝试做的只是拉回客户返回的时间,我建议创建一个名为“visitorbadges”的独立资源并将其连接到用户记录。因此,不是使用id查询并尝试查询数组,而是使用以下内容:
https://api.usergird.org/{yourorg}/{yourapp}/users/{userid}/vistorbadges
如果您使用的是BaaS用户ID而不是您自己的用户ID,您可以转到/ users / uuid或者,您也可以使用标签'name'({“name”:“f33498”})来存储用户ID,这将让您转到/ users / f33498 / visitorbadges
有关如何连接资源的信息,请参阅Apige文档: http://apigee.com/docs/app-services/content/connecting-users-other-data