如何为每个 MongoDB 搜索查询赋予不同的权重?

How can I weight each MongoDB search query differently?

我有一个 MongoDB collection,看起来像这样:

{
    "name": "McAllister's Deli",
    "menu": [
        {"sandwich": 4},
        {"spud": 3},
        {"salad": 5},
        {"cookie":2}
    ],
    "reviews": 45
}

我想根据这些餐厅的食物种类和评论数量对这些餐厅进行排名。例如,如果有人正在寻找 cookiesandwichMcAllister's Deli 将 return 通过采用 (cookie * sandwich * reviews) / menuItems 来排名 19.28。有没有办法优化我的查询以将此排名考虑在内?

编辑:由于在评论中被问到,我目前使用的是 Dart driver,但我熟悉 Mongo shell 并且可以翻译 shell 查询到我 driver 理解的查询。

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 被分开清关。