Azure DocumentDB按结果排序

Azure DocumentDB按结果排序,azure,azure-cosmosdb,Azure,Azure Cosmosdb,在DocumentDB中,我有一些这样的文档 { "Code": "123456", "ScanLog": [ { "TimeStamp": 20160224115507 }, { "TimeStamp": 20160224115641 } ] "LastScanTimeStamp": 20160224115641 } 我用C#进行了这个LINQ查询: 这就是结果: [ { "Code": "123456",

在DocumentDB中,我有一些这样的文档

{
  "Code": "123456",
  "ScanLog": [
    {
      "TimeStamp": 20160224115507
    },
    {
      "TimeStamp": 20160224115641
    }
  ]
  "LastScanTimeStamp": 20160224115641
}
我用C#进行了这个LINQ查询:

这就是结果:

[
  {
    "Code": "123456",
    "TimeStamp": 20160224115507
  },
  {
    "Code": "123456",
    "TimeStamp": 20160224115641
  },
  {
    "Code": "abcdef",
    "TimeStamp": 20160224101641
  },
  {
    "Code": "abcdef",
    "TimeStamp": 20160224105641
  }
]
为此,我以这种方式应用另一个顺序:

feedResp.OrderByDescending(a => a.TimeStamp).AsEnumerable();
答复是:

[
  {
    "Code": "123456",
    "TimeStamp": 20160224115641
  },
  {
    "Code": "123456",
    "TimeStamp": 20160224115507
  },
  {
    "Code": "abcdef",
    "TimeStamp": 20160224105641
  },
  {
    "Code": "abcdef",
    "TimeStamp": 20160224101641
  }
]
现在,如果我使用LINQ操作符Take()进行初始查询,指定检索项的限制,那么结果中会丢失一些元素。
为什么???

您可能已经在下单之前先下单了。在这种情况下,take从无序结果中获取一些元素,然后进行排序。如果您在订单之后执行take,您将从订单元素中获取集合。这可能就是您预期的结果。

通过此查询,您可以使用相同的文档实现连接,这意味着如果您有4个文档,每个文档有4个日志,那么您就有16个文档

Linq动态地创建查询,可能发生的情况是Take作用于文档,而不是查询的结果

我将尝试在文档查询中使用,并指定我希望在那里获得的最大结果数

var Query = client.CreateDocumentQuery("my_collection_uri",new FeedOptions(){MaxItemCount=4}).OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery();
var feedResp = await Query.ExecuteNextAsync();

我在第一个查询的.AsDocumentQuery调用之前放置了这个Take。您最初的响应有4个结果。您为Take指定了什么值?如果它小于4,你显然会得到更少的结果。我已经尝试过FeedOptions参数,但结果是一样的。如果我有一个16个文档的连接结果,如您所说,应用Take操作符或FeedOptions参数,最多获取10个结果,然后按顺序,我获取第一个和第二个文档,然后它跳过一些下一个文档,然后检索其他下一个文档。我想这就是您想要实现的。我现在明白了,您想要的是在连接发生之前对文档应用Take,因此10次Take可能会产生40个结果(如果每个文档有4个日志),对吗?我已经解决了这个问题。实际上,这不是一个真正的问题,因为DocumentDB的结果集根据文档的结构是正确的。我花了很多时间分析结果,然后我发现这是一个正确的结果。
var Query = client.CreateDocumentQuery("my_collection_uri",new FeedOptions(){MaxItemCount=4}).OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery();
var feedResp = await Query.ExecuteNextAsync();