MongoDB 按条件排序
MongoDB sorting by condition
大家好,我遇到了一种情况,我需要对符合某些条件的数据进行排序,然后根据优先级对它们进行排序,即
首先,我想通过优先级降序对数据进行排序,然后如果优先级为 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,
},
},
]);
嘿伙计们谢谢你抽出时间我解决了我使用的问题
我只是在 $project 中添加一个字段,因为我正在使用 document: "$$ROOT"
所以它创建文档字段并将所有数据存储在其中,这就是优先级字段不可用的原因,
我只是在 $project 中添加 priority:1
并且它包含该字段。下面我 post 工作代码可能对你有帮助,如果你也想要类似的东西。
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,
},
},
])
大家好,我遇到了一种情况,我需要对符合某些条件的数据进行排序,然后根据优先级对它们进行排序,即 首先,我想通过优先级降序对数据进行排序,然后如果优先级为 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,
},
},
]);
嘿伙计们谢谢你抽出时间我解决了我使用的问题
我只是在 $project 中添加一个字段,因为我正在使用 document: "$$ROOT"
所以它创建文档字段并将所有数据存储在其中,这就是优先级字段不可用的原因,
我只是在 $project 中添加 priority:1
并且它包含该字段。下面我 post 工作代码可能对你有帮助,如果你也想要类似的东西。
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,
},
},
])