我有一些布局完全相同的数据,分布在多个集合中,比如说我们有名为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"
}