Parse.com地理空间计数查询始终限制为100

时间:2015-04-30 21:39:24

标签: parse-platform

我的目标是检索一个计数,该计数可用于显示基于相同标准接收推送的设备数量的估计值。但是,我相信我遇到了MongoDB中的一个错误,我找到了解决办法,但我正在寻找使用Parse的类似解决方法。

此链接提供问题说明和可能的解决方法:https://groups.google.com/forum/?fromgroups=#!topic/mongomapper/MfRDh2vtCFg

此stackoverflow:Mongo and find always limited to 100 with geo data

我无法弄清楚如何让解决方法与Parse一起使用。 Parse的REST API地理查询文档显示了一个使用$ within的示例,但似乎唯一有效的$ within查询是$ box查询。我试图使用$ center,$ centerSphere等,但是Parse刚刚返回了一个错误,它预计键“$ box”。

我正在使用Parse REST API。该查询看起来像下面的一些格式,使其可读:

installations/?where={
    "channels": {
        "$in": ["Everyone"],
        "$nin": []
    },
    "location": {
        "$nearSphere": {
            "__type": "GeoPoint",
            "latitude": 35.4432,
            "longitude": -97.6238
        },
        "$maxDistanceInMiles": 10
    }
}
&count=1
&limit=0

我的问题: 有没有办法让建议的解决方法在Parse中运行?也许是没有证件的东西?如果不使用REST API可能是.NET SDK?

1 个答案:

答案 0 :(得分:0)

到目前为止,我还没有为此问题找到一个很好的解决方法。我将在云代码中进行此操作,您可以递归地生成大量单独的计数请求,然后返回结果,而不会为每个请求提供网络开销。

创建您的云功能和查询以使用所有相关标准运行,然后使用如下函数:

function recursiveCountForQuery(query, count) {
    console.log("recursiveCountForQuery now @ " + count);

    query.limit(100);
    query.skip(count);

    return query.find().then(function(values) {
        var number = values.length;
        var total = count + number;

        if (number < 100 || total >= 500) {
            return Parse.Promise.as(total);
        } else {
            return recursiveCountForQuery(query, total);
        }
    });
}

运行查询并等待承诺返回计数(total >= 500因此它运行时间不会太长但可以根据您的使用情况删除/更改。)