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

米哈尔·阿塔佐夫(Michal Artazov)

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

{
    name    : "John Doe",
    address : "Some cool address",
    value1  : 2,
    value2  : 3,
    value3  : 5
}

我需要检索所有字段,并按等于的数字对降序的文档进行排序value1 + value2 + value3

我发现的唯一解决方案(因为它无法检索所有字段,所以不完整)看起来像这样:

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

就像我说的那样,这仅返回sum不是我想要的字段。

编辑:此外,该文档实际上要大一点,所以我不想使用伪解决方案,例如

$project: {
    name:    1,
    address: 1,
    ...
}

即我想要一些通用的可重用解决方案,而不是针对特定情况的解决方案

帕尔文(Pavin)Gasimzade

尝试以下查询:

db.myCollection.aggregate(
{$project: {name : "$name", 
            address : "$address", 
            value1 : "$value1", 
            value2 : "$value2", 
            value3 : "$value3",
            sum : {$add : ["$value1", "$value2", "$value3"]}}},
{$sort: {sum: -1}}
)

据我所知,MongoDB中没有按条件排序之类的选项。另外,默认情况下也没有选项将所有字段添加到项目中。出现了一个问题,但尚未解决。

现在,另一种选择是创建新字段(例如:totalValues)并将总和存储在该字段中,以及在更改值字段时。然后,您可以按totalValues进行排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章