2017-04-25 47 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