5

Windows store javascript 응용 프로그램에서 작업 중입니다. 이 응용 프로그램은 하늘빛 모바일 서비스의 데이터를 사용합니다.하늘색 데이터베이스에서 행 수를 얻는 방법은 무엇입니까?

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

코드는 전체 테이블 item를 가져와 변수 itemTable에 저장 : 아래의 코드를 살펴 보자.

itemTable에있는 행 수를 반환하는 코드는 무엇입니까 ??

답변

5

은 무엇 당신이 찾고있는 것은 테이블/쿼리 개체에 includeTotalCount 방법 (불행하게도이 문서에서 누락 된 것, 나는 그것을 고정하도록 제품 팀에 버그를 제출합니다).

쿼리 개체에서 read을 호출하면 매우 큰 테이블의 모든 요소를 ​​반환하는 순진한 호출을 방지하기 위해 기본적으로 50 (IIRC, 숫자가 다를 수 있음) 요소가 반환됩니다. 따라서 예약 된 서비스에 대한 아웃 바운드 대역폭 비용 또는 무료 서비스에 대한 할당량 지정). 따라서 테이블의 모든 요소를 ​​가져오고 결과 길이를 얻는 것이 정확하지 않을 수 있습니다.

테이블의 요소 수를 원하는 경우 다음 코드를 사용할 수 있습니다. 0 바이트 요소와 총 개수를 반환합니다.

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(); 
    }); 

당신은 또한 몇 가지 요소를 조회 할 경우 및

은 또한 includeTotalCount뿐만 아니라 적절한 take()skip() 호출을 추가하고, 총 수 (즉, 페이징) 등이 있습니다.

+1

carlosfigueira 감사합니다! 그리고 거기에 방법이 있습니다. azure 측에서이 과정을 수행하고 행 수 결과를 클라이언트 응용 프로그램에만 반환 하시겠습니까? –

+0

정확하게 이것을 수행 한 간단한'Query' 메소드'.count()'를 제공하는 것이 좋습니다. .getTable ('tableName'). (read() 대신 count()') 스칼라 결과를 얻으려면; – SliverNinja

+1

좋은 아이디어는 제품 팀에 제안을 남깁니다. – carlosfigueira

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

+0

답장을 보내 주셔서 감사합니다. SilverNinja! 그러나 위에서 주어진 코드에서 "items"는 "results"를 할당 한 후에도 여전히 정의되지 않았습니다. 따라서 "items"에 "length"를 추가하면 다음 오류가 발생합니다. JavaScript 런타임 오류 : 정의되지 않은 null 참조의 속성 'length'을 가져올 수 없습니다. (참고 : My Azure DB는 비어 있음) –

+0

'read()'오퍼레이션 중에 에러를 되 돌린다. 'failFilter' ...'.then (function (results) {...}) 함수에 대해 다른 매개 변수를 ['then()'] (http://api.jquery.com/deferred.then/)에 추가하십시오.() {alert ("$. 읽지 못했습니다!');)' – SliverNinja

4

사람은 (나 같은) C 번호에에서는 totalCount을 얻는 방법에 여기 관심이 오는 경우, 이것은 당신이 그것을하는 방법이다 :

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

신용이 블로그 게시물로 이동 here

관련 문제