MongoDB在一个排序阶段对多个集合进行查询

时间:2020-07-28 13:44:51

标签: mongodb mongodb-query aggregation-framework

我有一些布局完全相同的数据,分布在多个集合中,比如说我们有名为Jobs.Current,Jobs.Finished,Jobs.ByJames的集合。

我使用这些集合之一中的某些聚合阶段实现了一个复杂的查询,其中最后一个阶段是排序。就像这样(但实际上它是用C#实现的,并另外做了投影):

db.ArchivedJobs.aggregate([ { $match: { Name: { $gte: "A" } } }, { $addFields: { "UpdatedTime": { $max: "$Transitions.TimeStamp" } } }, { $sort: { "__tmp": 1 } } ])

我的新要求是将所有这些集合包括到我的查询中。我可以通过简单地在所有集合上依次运行相同的查询来做到这一点-但是我仍然需要将结果排序在一起。由于这种排序不是那么简单(使用由$ max在子数组上创建的附加字段),并且我使用的是skip和limit选项,所以我希望可以采用以下方式:

  • 通过定义适当的聚合步骤来执行我已经在所有相关集合上实现的查询
  • 然后将整个结果排序在同一聚合请求中

我找到了一个具有$ lookup阶段的内容,但由于需要进行一些面向字段的匹配(?),因此无法将其应用于我的请求。我需要访问完整的对象。

数据类似于

{
  "_id":"4242",
  "name":"Stream recording Test - BBC 60 secs switch",
  "transitions":[
  {
    "_id":"123",
    "timeStamp":"2020-02-13T14:59:40.449Z",
    "currentProcState":"Waiting"        
  },
  {
    "_id":"124",
    "timeStamp":"2020-02-13T14:59:40.55Z",
    "currentProcState":"Running"        
  },
  {
    "_id":"125",
    "timeStamp":"2020-02-13T15:00:23.216Z",
    "currentProcState":"Error"        
  } ],
  "currentState":"Error"
}

0 个答案:

没有答案