大家好,我处于一种情况,我需要对符合某些条件的数据进行排序,然后再根据优先级对它们进行排序,即 首先,我想按优先级从高到低对数据进行排序,如果优先级为1(高),则对它们进行排序。通过createdAt字段对文档进行排序,否则通过日期字段对文件进行排序。
我目前独自创建一个聚合,但未返回正确的数据。
model.aggregate([
{
$match: {
jobId,
deprecated: false,
},
},
{
$project: {
document: "$$ROOT",
sort: {
$cond: {
if: {
$eq: ["$priority", 1],
},
then: "$createdAt",
else: "$date",
},
},
},
},
{
$sort: {
priority: -1,
sort: 1,
},
},
]);
答案 0 :(得分:0)
嘿,谢谢您为我解决的问题
由于我使用的是document: "$$ROOT"
,我只是在$ project中添加了一个字段
因此它创建了文档字段并在其中存储了所有数据,这就是为什么优先级字段不可用的原因,
我只需在$ project中添加priority:1
,它就包含该字段。下面,我发布了工作代码,如果您还想要类似的东西,它可能会对您有所帮助。
model.aggregate([
{
$match: {
jobId: '5c501eed65816d61c6a0af77',
deprecated: false,
},
},
{
$project: {
document: "$$ROOT",
priority: 1,
sort: {
$cond: {
if: {
$eq: ["$priority", 1],
},
then: "$createdAt",
else: "$date",
},
},
},
},
{
$sort: {
priority: -1,
sort: 1,
},
},
])