2015-04-30 36 views
3

我的目標是檢索可用於顯示基於相同條件接收推送的設備數量估計的計數。然而,我相信我正在運行MongoDB中的一個錯誤,我找到了解決方法,但我正在尋找一個類似的解決方法,使用Parse。Parse.com地理空間計數查詢始終限制爲100

此鏈接提供了對問題的描述和可能的解決方法:https://groups.google.com/forum/?fromgroups=#!topic/mongomapper/MfRDh2vtCFg

而且這個計算器:Mongo and find always limited to 100 with geo data

我只是無法弄清楚如何獲得解決方法與解析工作。 Parse的REST API地理查詢文檔顯示了一個使用$內的示例,但它似乎是$內的唯一有效查詢是$ 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 

我的問題: 有沒有一種方法來獲得建議的解決方法的解析工作?也許那些沒有記錄的東西?如果不使用REST API,也許.NET SDK?

+0

由於這只是爲了現在對用戶進行估算,我們將使用$內$框查詢。然而,MongoDB在$ center查詢選項中提供了一個$,但是由於某種原因使用該選項的Parse API塊仍然不幸。 http://docs.mongodb.org/v2.2/reference/operator/query/center/指向舊版本的文檔,因爲它似乎更好地與Parse的實現相匹配(而不是geoWithin等) – kerv2150

回答

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是如此它不會運行太長,但可以根據您的使用情況刪除/更改)。

+0

感謝你的建議。我忘記了我實際上已經研究過使用雲代碼的可能性,並道歉,我忘了在我原來的帖子中提到。我認爲這通常是一個很好的解決方法。但是,如果沒有在應用程序之間共享雲代碼的能力,那麼此時就會變成針對我們特定情況的指數部署和維護頭痛。由於這個原因,除了推送通知之外,我們實際上已經從Parse中移除了一切,它只是不適合我們的模型。 – kerv2150