提供 mongdb 聚合中字符串值的排序顺序

Wil*_*lyC 2 sorting mongodb

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

{
    _id: <someMongoId>,
    status: 'start'
    otherImportantData: 'Important!'
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

假设我可以做到这一点。我会status这样绘制并映射它:

start: 1
middle: 2
end: 3
<anything else>: 0
Run Code Online (Sandbox Code Playgroud)

然后我可以在聚合管道中执行类似的操作:

{
    $sort: { statusValue : 1 }
}
Run Code Online (Sandbox Code Playgroud)

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

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

use*_*814 6

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

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

[
 {"$addFields":{ "statusValue":{"$indexOfArray":[[start, middle, end], "$status"]}}}, 
 {"$sort":{"statusValue":1}}
]
Run Code Online (Sandbox Code Playgroud)