【问题标题】:order by in sub document in DocumentDB在 DocumentDB 的子文档中排序
【发布时间】:2017-04-25 13:52:24
【问题描述】:

我有一个 json 文档,如下所示,带有子文档

[
  {
    "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}
    ]
  }
]

我只想在查询中获取'results'标签数据,按prcnt排序

SELECT top 10 m.results FROM m join r in m.results where m.memberId=2 和 m.tblType='search' 按 r.prcnt 排序

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

不支持对相关集合进行排序。

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

提前致谢!!

【问题讨论】:

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


【解决方案1】:

根据您的要求,我已经检查了这个问题。以下是我对这个问题的理解:

  • 如果memberIdtblType可以定位到单个文档,那么你可以参考这个类似的issue

UDF

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

查询

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.");
}

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2023-03-20
    • 2015-10-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多