我有一个看起来像这样的MongoDB集合:
{
"name": "McAllister's Deli",
"menu": [
{"sandwich": 4},
{"spud": 3},
{"salad": 5},
{"cookie":2}
],
"reviews": 45
}
我想根据他们的食物种类和评论数量对这些餐馆进行排名。例如,如果有人正在寻找cookie
和sandwich
,则McAllister's Deli
会通过19.28
返回说(cookie * sandwich * reviews) / menuItems
的排名。有没有办法优化我的查询以考虑此排名?
答案 0 :(得分:0)
db.rest.aggregate([{
$project: {
_id: 1,
sandwich: { $arrayElemAt: [ '$menu.sandwich', 0]},
cookie: { $arrayElemAt: [ '$menu.cookie', 0]},
menuItems: {$size: '$menu'}
}
},{
$project: {
_id: 1,
rank: { $divide: [{ $add: ['$sandwich', '$cookie']}, '$menuItems' ]}
}
}
])
可能可以合并。 $ project被分开以进行清理。