我在MongoDB中有一个包含5个阶段的聚合查询。匹配,查找,项目,项目和匹配。如果最终匹配没有结果,则查询需要45秒。如果匹配产生结果,那么它需要不到100毫秒。
db.instances.aggregate([
{ $match: { "Record.Closed": null } },
{ $lookup: { from: "messages", localField: "Record.ApprovalId", foreignField: "Record.ApprovalId", as: "approvalMessages" } },
{ $project: { Record: 1, parsed:
{ $filter: { input: "$approvalMessages", as: "item", cond: { $or: [ { $eq: [ "$Record.LastRoundupSent", null ] },
{ $gte: [ "$$item.Record.Created", "$Record.LastRoundupSent" ] } ] } } } } },
{ $project: { Record: 1, MessageCount: { $size: "$parsed" } } } ,
{ $match: { "MessageCount" : { $gt : 0 } } }
])
最终$match
会导致我的查询在返回0结果时挂起
如果我将其更改为:{ $match: { "MessageCount" : { $eq : 0 }}}
那么就可以了。
有什么想法吗?