如何以不同方式对每个MongoDB搜索查询进行加权?

时间:2015-09-22 16:27:06

标签: mongodb performance database-performance database

我有一个看起来像这样的MongoDB集合:

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

我想根据他们的食物种类和评论数量对这些餐馆进行排名。例如,如果有人正在寻找cookiesandwich,则McAllister's Deli会通过19.28返回说(cookie * sandwich * reviews) / menuItems的排名。有没有办法优化我的查询以考虑此排名?

编辑:由于在评论中询问,我目前正在使用Dart驱动程序,但我熟悉Mongo shell,可以将shell查询转换为我的驱动程序可以理解的查询。

1 个答案:

答案 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被分开以进行清理。