我需要从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,
...
}
即我想要一些通用的可重用解决方案,而不是针对特定情况的解决方案
尝试以下查询:
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] 删除。
我来说两句