如何在Usergrid集合中查询数组?

时间:2014-08-13 22:33:17

标签: apigee usergrid

我成功地从

获取数据
 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'

这似乎没有任何回报。

我错过了什么?

2 个答案:

答案 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