MongoDB获取所有字段+按多个字段计算的值排序

Mic*_*zov 1 mongodb aggregation-framework

我需要从MongoDB中的集合中获取文档.单个文档如下所示:

{
    name    : "John Doe",
    address : "Some cool address",
    value1  : 2,
    value2  : 3,
    value3  : 5
}
Run Code Online (Sandbox Code Playgroud)

我需要检索所有字段+按等于的数字降序排序的文档value1 + value2 + value3.

我找到的解决方案(不完整,因为它不检索所有字段)看起来像这样:

db.someCollection.aggregate(
    {
        $project: {
            sum: { $add: [ "$value1", "$value2", "$value3" ] }
        },
        $sort: {
            sum: -1
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

就像我说的,这只返回sum不是我想要的字段.

编辑:文件实际上有点大,所以我不想使用伪解像

$project: {
    name:    1,
    address: 1,
    ...
}
Run Code Online (Sandbox Code Playgroud)

即我想要一些通用的可重复使用的解决方案,而不是特定于案例的解决方案

Dek*_*eka 7

您可以使用$$ ROOT来引用根文档.将此文档的所有字段保留在一个字段中,然后尝试获取它(取决于您的客户端系统:Java,C++,...)

db.someCollection.aggregate(
    {
        $project: {
            sum: { $add: [ "$value1", "$value2", "$value3" ] },
            document: "$$ROOT"
        },
        $sort: {
            sum: -1
        }
    }
)
Run Code Online (Sandbox Code Playgroud)