5

我正在開一個windows store的javascript應用程序。該應用程序使用來自Azure移動服務的數據。 考慮下面的代碼:如何從蔚藍數據庫中獲取行數?

var itemTable = mobileService.getTable('item'); 
//item is the table name stored in the azure database 

該代碼讀取整個表item並將其保存到一個變量itemTable

什麼代碼會返回itemTable中存在的行號?

回答

5

什麼你要找的是表/查詢對象的includeTotalCount方法(遺憾的是它是一個從文檔丟失,我將提交錯誤的產品團隊有它固定的)。

當您在查詢對象上調用read時,它將默認返回50個(IIRC,數字可能不相同)元素,以防止天真的調用返回非常大的表中的所有元素(從而導致預留服務的出站帶寬成本,或免費配額的配額)。因此,獲取表格中的所有元素,並獲得結果的長度可能不準確。

如果你想要的是表中元素的數量,你可以使用下面的代碼:返回元素和總數。

var table = client.getTable('tableName'); 
    table.take(0).includeTotalCount().read().then(function (results) { 
     var count = results.totalCount; 
     new Windows.UI.Popups.MessageDialog('Total count: ' + count).showAsync(); 
    }); 

如果您想查詢一些元素,並且還包括總計數(即尋呼),只需添加相應take()skip()電話,也是includeTotalCount爲好。

+1

謝謝carlosfigueira!它工作:)。有沒有辦法在azure方面執行這個過程,並將行計數結果單獨返回給客戶端應用程序? – 2013-03-25 15:20:55

+0

如果提供一個簡單的'Query'方法'.count()'就可以了。 .getTable('tableName')。count()'而不是'read()'得到標量結果; – SliverNinja 2013-03-25 16:17:30

+1

好主意,會向產品團隊提出建議。 – carlosfigueira 2013-03-25 18:37:20

2

您需要對table query執行read(),然後獲得結果的length

var items, numItems; 
itemTable.read().then(function(results) { items = results; numItems = items.length; }); 

如果您只顯示記錄數而不是整個結果 - 您應該選擇ID列以減少傳輸的數據量。我沒有在JS Query API中看到count()方法可用,以滿足此需求。

var itemTable = mobileService.getTable('item').select('itemID'); 
+0

這代碼實際上不起作用。傳遞給'then'函數的函數參數將在網絡請求完成後異步執行。這意味着'var numItems = items.length'行會在這之前被執行,並且'items'在那個時候將不被定義。 – carlosfigueira 2013-03-25 14:51:12

+0

謝謝你的回覆SilverNinja!但是在上面給出的代碼中,「items」在爲其分配「結果」之後仍未定義。因此,將「length」附加到「items」彈出以下錯誤 JavaScript運行時錯誤:無法獲取未定義或空引用的屬性「長度」 (注意:我的Azure DB不爲空) – 2013-03-25 14:51:31

+0

嘗試檢查您是否在'read()'操作中返回一個錯誤。爲''failFilter''添加另一個參數['then()'](http://api.jquery.com/deferred.then/)... .then(function(results){...},function (){alert(「$。read failed!「);)' – SliverNinja 2013-03-25 14:58:06

4

如果有人來到這裏和感興趣的是如何得到TOTALCOUNT只在C#(像我一樣),那麼這就是你如何做到這一點:

var table = MobileService.GetTable<T>(); 
var query = table.Take(0).IncludeTotalCount(); 
IList<T> results = await query.ToListAsync(); 
long count = ((ITotalCountProvider)results).TotalCount; 

幸得這篇博客here