从mongodb聚合中的字符串值提供排序顺序[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

假设我有一个包含如下文档的集合:

{
    _id: <someMongoId>,
    status: 'start'
    otherImportantData: 'Important!'
}

......状态可以是“开始”,“中间”或“结束”。

我想通过状态字段对这些文档进行排序(特别是在聚合框架中) - 但我不希望它按字母顺序排列;我想按顺序开始排序 - >中间 - >结束。

我一直在寻找一些方法将status字段投影到一个数字的statusValue字段(我可以指示每个字符串映射到的数字),尽管我很乐意看看任何替代方案。

假设我能做到这一点。我会采取status并将其映射为:

start: 1
middle: 2
end: 3
<anything else>: 0

然后我可以在聚合管道中做这样的事情:

{
    $sort: { statusValue : 1 }
}

...但我不确定如何在聚合管道中映射这些状态。

如果没有办法做到这一点,至少我会知道停止寻找。什么是下一个最好的方式?使用MongoDB中的Map-Reduce功能?

mongodb sorting
1个回答
2
投票

您可以在3.4中尝试以下聚合。

使用$indexOfArray在值列表中定位搜索字符串的位置,并使用$addFields将输出索引保存在文档的额外字段中,然后使用$sort对文档进行排序

[
 {"$addFields":{ "statusValue":{"$indexOfArray":[[start, middle, end], "$status"]}}}, 
 {"$sort":{"statusValue":1}}
]
© www.soinside.com 2019 - 2024. All rights reserved.