2017-04-25 44 views
1

子文檔中我有像子文檔以下JSON文檔爲了在DocumentDB

[ 
    { 
    "id": "73e799df-b7a5-7470-4f25-ee6c1811a5b2", 
    "tblType": "search", 
    "memberId": 2, 
    "results": [ 
     {"prcnt": 89,"distance": 8867775.747141607}, 
     {"prcnt": 30,"distance": 11010216.470879028}, 
     {"prcnt": 96,"distance": 9128590.716183286}, 
     {"prcnt": 41,"distance": 9652043.937920697} 
    ] 
    } 
] 

我想prcnt只得到與順序查詢「結果」標籤數據

SELECT TOP 10 m.results FROM米加入m.results r其中m.memberId = 2 和m.tblType = '搜索' 命令由r.prcnt

當我執行查詢,得到的錯誤如下

..

訂單超過相關的收藏品不被支持。

如何根據我的要求獲取數據。

在此先感謝!

+2

的[DocumentDB排序結果由值到一個數組(可能的複製http://stackoverflow.com/questions/35584755/documentdb-sort-results-by-a-value-into-an-數組) – Mikhail

+0

你解決了這個問題嗎,你需要進一步的支持嗎? –

回答

0

根據您的要求,我檢查了這個問題。下面是我對這個問題的認識:

  • 如果memberIdtblType可以找到單一的文件,那麼你可以參考這個類似issue

UDF

function sortByPrcntNumber (results) { 
    return results.sort(function(a,b){ 
     return a.prcnt-b.prcnt; 
    }); 
} 

QUERY

SELECT value udf.sortByPrcntNumber(c.results) 
from c 
where c.memberId=2 and c.tblType='search' 
  • 如果memberIdtblType可以檢索多個文檔,我認爲你可以利用存儲過程如下:
function sample(top,tblType,memberId){ 
    var collection=getContext().getCollection(); 
    var isAccepted=collection.queryDocuments(
    collection.getSelfLink(), 
    "SELECT value {\"prcnt\":r.prcnt,\"distance\":r.distance} from c join r in c.results where c.tblType='"+tblType+"' and c.memberId="+memberId+"", 
    function(err,feed,options){ 
     if(err) throw err; 
     if(!feed||!feed.length) getContext().getResponse().setBody("no docs found"); 
     else { 
      //order by prcnt 
      var orderedFeed=feed.sort(function(a,b){ 
       return a.prcnt-b.prcnt; 
      }); 
      //select top 
      var topFeed=orderedFeed.slice(0,top); 
      getContext().getResponse().setBody(topFeed); 
     } 
    }); 

    if(!isAccepted) throw new Error("The query was not accepted by the server."); 
} 

結果

enter image description here