首页 > 解决方案 > MongoDB 在一个排序阶段查询多个集合

问题描述

我有一些布局相同的数据分为几个集合,比如我们有名为 Jobs.Current、Jobs.Finished、Jobs.ByJames 的集合。

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

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

我的新要求是将所有这些集合包含到我的查询中。我可以通过简单地按顺序对所有集合运行相同的查询来做到这一点 - 但我仍然需要将结果排序在一起。由于这种排序不是那么微不足道(使用由子数组上的 $max 创建的附加字段)并且我正在使用跳过和限制选项,我希望可以通过以下方式执行此操作:

我找到了带有 $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"
}

标签: mongodbmongodb-queryaggregation-framework

解决方案


推荐阅读