Mongodb按复杂的计算值对文档进行排序 [英] Mongodb sort documents by complex computed value
本文介绍了Mongodb按复杂的计算值对文档进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
items = collection.aggregate([
{"$match": {}},
{"$project": {
'temp_score': {
"$add": ["$total_score", 100],
},
'temp_votes': {
"$add": ["$total_votes", 20],
},
'weight': {
"$divide": ["$temp_score", "$temp_votes"]
}
}
}
])
total_score和total_votes已存储在文档中,
The total_score and total_votes have stored in the document,
我可以按预期获得temp_score和temp_votes,但是没有重量,有什么建议吗?
I can get temp_score and temp_votes as expected, but can't get weight, any suggestion?
推荐答案
您的$divide
中还不存在您的$temp_score
和$temp_votes
.
Your $temp_score
and $temp_votes
are not existing yet in your $divide
.
您可以再做一个$project
:
db.user.aggregate([{
"$project": {
'temp_score': {
"$add": ["$total_score", 100],
},
'temp_votes': {
"$add": ["$total_votes", 20],
}
}
}, {
"$project": {
'temp_score':1,
'temp_votes':1,
'weight': {
"$divide": ["$temp_score", "$temp_votes"]
}
}
}])
或重新计算$divide
中的temp_score
和temp_votes
:
db.user.aggregate([{
"$project": {
'temp_score': {
"$add": ["$total_score", 100],
},
'temp_votes': {
"$add": ["$total_votes", 20],
},
'weight': {
"$divide": [
{ "$add": ["$total_score", 100] },
{ "$add": ["$total_votes", 20] }
]
}
}
}]);
您还可以使用 $let
运算符,该运算符将用于创建2个变量temp_score
和temp_votes
.但是结果将可以在一个字段(此处为total
)下访问:
You can also do this in one single $project
using the $let
operator that will be used to create 2 variables temp_score
and temp_votes
. But the results will be accessible under a single field (here total
) :
db.user.aggregate([{
$project: {
total: {
$let: {
vars: {
temp_score: { $add: ["$total_score", 100] },
temp_votes: { $add: ["$total_votes", 20] }
},
in : {
temp_score: "$$temp_score",
temp_votes: "$$temp_votes",
weight: { $divide: ["$$temp_score", "$$temp_votes"] }
}
}
}
}
}])
这篇关于Mongodb按复杂的计算值对文档进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文