1

我成功地能够从

 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

}

但是,我不知道如何修改以下查询以允许我将结果集缩小到仅包含 data.user.badges 数组中的“Cart Abandoner”值的那些。

这可能吗?我试过了:

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'

这似乎没有返回任何东西。

我错过了什么?

4

2 回答 2

0

不幸的是,目前没有办法查询数组。您最好的选择是将其存储为对象。

于 2014-08-14T02:38:03.520 回答
0

两件事:我一直在查询数组的元素,但是 ql 查询字符串有点喜怒无常。如果 'string' 包含在数组 'element' 中的任何位置,element = 'string' 应该返回整个 JSON 有效负载,因此您得到混合结果的事实可能是由于嵌套数组的复杂性。

也就是说,ql 查询字符串允许您限制返回的资源(如您的第一个示例,其中 id = 'xxx')。除了从该资源中返回整个 JSON 有效负载之外,没有任何方法可以返回任何内容(例如根据查询限制截断您的数组)。

因此,如果您要做的只是提取客户返回的时间,我建议创建一个名为“visitorbadges”之类的单独资源并将其连接到用户记录。因此,与其使用 id 查询并尝试 t 查询数组,不如使用以下内容:

https://api.usergird.org/{yourorg}/{yourapp}/users/{userid}/vistorbadges

如果您使用 BaaS 用户 ID 而不是您自己的用户 ID,您可以转到 /users/uuid,或者,您也可以使用标签“名称”({“name”:“f33498”})存储用户 ID,这样您就可以转到 /用户/f33498/visitorbadges

请参阅 Apige 文档了解如何连接资源: http ://apigee.com/docs/app-services/content/connecting-users-other-data

于 2014-08-14T16:56:38.327 回答