gpt4 book ai didi

mongodb - 将 MongoDB 聚合 $lookup 限制为仅 1 个匹配项

转载 作者:行者123 更新时间:2023-12-02 01:02:44 27 4
gpt4 key购买 nike

有两个合集,usersreports .

我的目标是进行聚合,获取所有用户和每个 user包括用户的数量最后 report .

这是我目前的聚合:

db.users.aggregate([{
$lookup: {
from: 'reports',
localField: '_id',
foreignField: 'userId',
as: 'report',
},
}, {
$project: {
'lastReportAmount': {
$let: {
vars: {
lastReport: {'$arrayElemAt': ['$report', 0]},
},
in: '$$lastReport.amount',
},
},
'id': '$_id',
'name': 1,
'firstLogin': 1,
'email': 1,
},
}])

此查询工作正常,但速度非常慢。
原因是 $lookup返回 全部 与某个匹配的报告 userId , 而不是一个(最后一个)。

有没有办法限制$lookup只有一场比赛?

最佳答案

您可以尝试 3.6 中提供的新查找变体。

在报告集合中的 userId 和 date 字段上添加一个索引,看看它是否被选中。

db.users.aggregate([
{"$lookup":{
"from": "reports",
"let": {"_id":"$_id"},
"pipeline":[
{"$match":{"$expr":{"$eq":["$$_id","$userId"]}}},
{"$sort":{"date": -1}},
{"$limit":1}
],
"as": "lookup-latest"
}},
{"$project": {
'lastReportAmount':{'$arrayElemAt':['$lookup-latest', 0]},
'id': '$_id',
'name': 1,
'firstLogin': 1,
'email': 1
}}
])

关于mongodb - 将 MongoDB 聚合 $lookup 限制为仅 1 个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49429054/

27 4 0
文章推荐: amazon-advertising-api - 亚马逊 - 无法使用广告 API 请求绩效报告
文章推荐: TYPO3 Extbase switchableControllerActions
文章推荐: html - 在 中使用