在DocumentDB中的子文档中排序

时间:2017-04-25 13:52:25

标签: sql-order-by azure-cosmosdb nosql

我有一个json文档,如下面的子文档

<div id="app">
  <button @click="switch1=!switch1">switch1</button>
  <div v-if="switch1">
    <h4>Select an image</h4>
    <input type="file" @change="onFileChange">
  </div>
</div>

我希望仅在查询中获取'结果'标记数据 prcnt

  

SELECT top 10 m.results FROM m join r in m.results m.memberId = 2   和m.tblType ='搜索'顺序由r.prcnt

当我执行查询时,得到如下错误..

  

不支持按相关集合排序。

如何根据我的要求获取数据。

提前致谢!!

1 个答案:

答案 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可以检索多个文档,我认为您可以使用 STORED PROCEDURES ,如下所示:
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