如何为每个 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
}
我想根据这些餐厅的食物种类和评论数量对这些餐厅进行排名。例如,如果有人正在寻找 cookie
和 sandwich
,McAllister'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 被分开清关。
我有一个 MongoDB collection,看起来像这样:
{
"name": "McAllister's Deli",
"menu": [
{"sandwich": 4},
{"spud": 3},
{"salad": 5},
{"cookie":2}
],
"reviews": 45
}
我想根据这些餐厅的食物种类和评论数量对这些餐厅进行排名。例如,如果有人正在寻找 cookie
和 sandwich
,McAllister'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 被分开清关。