gpt4 book ai didi

node.js - $concatArrays 上的 MongoDB $sort

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:30 26 4
gpt4 key购买 nike

我正在尝试将两个嵌套数组(使用 $concatArrays)连接到一个新字段中。我想通过两组对象中存在的属性对串联(Model.timeline)的输出进行排序。我似乎无法让它与 $unwind 一起工作。这是没有任何排序的查询:

Model.aggregate([
{
$match: {
'id': id
}
},
{
$project: {
id: 1,
name: 1,
flagged: 1,
updatedAt: 1,
lastEvent: {
$arrayElemAt: ['$events', -1]
},
lastimage: {
$arrayElemAt: ['$images', -1]
},
timeline: {
$concatArrays: [
{ $filter: {
input: '$events',
as: 'event',
cond: { $and: [
{ $gte: ['$$event.timestamp', startAt] },
{ $lte: ['$$event.timestamp', endAt] }
]}
}},
{ $filter: {
input: '$images',
as: 'image',
cond: { $and: [
{ $gte: ['$$image.timestamp', startAt] },
{ $lte: ['$$image.timestamp', endAt] }
]}
}}
]
}
}
}
]);

我是否遗漏了一些明显的东西?

最佳答案

在比赛和项目之后,您需要三个管道阶段。首先是$unwind,然后是$sort,最后是$group。使用 $first 运算符保留所有字段。

{
$undwind : "$timeline",
},
{
$sort : {"your.sortable.field" : 1}
},
{
$group : {
_id : "$_id",
name : {$first : 1},
flagged : {$first : 1},
updatedAt : {$first : 1},
lastEvent : {$first : 1},
lastimage : {$first : 1},
timeline : {$push : "$timeline"}
}
}

请注意,即使您在比赛阶段后拥有多个文档,此功能也将起作用。所以基本上这将对每个文档中的数组元素进行排序。

关于node.js - $concatArrays 上的 MongoDB $sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com